Tengo un demonio de Linux que bifurca a algunos niños y los supervisa en caso de fallos (reiniciándose según sea necesario). Será genial si el padre puede supervisar el uso de la memoria de los procesos hijos para detectar fugas de memoria y reiniciar los procesos secundarios cuando vayan más allá de un determinado tamaño. ¿Cómo puedo hacer esto?Supervisar el uso de la memoria del proceso secundario
Respuesta
Usted debe ser capaz de obtener información de la memoria detallada de/proc/{PID}/estado:
Name: bash
State: S (sleeping)
Tgid: 6053
Pid: 6053
PPid: 6050
TracerPid: 0
Uid: 1007 1007 1007 1007
Gid: 1007 1007 1007 1007
FDSize: 256
Groups: 1007
VmPeak: 48076 kB
VmSize: 48044 kB
VmLck: 0 kB
VmHWM: 4932 kB
VmRSS: 2812 kB
VmData: 2232 kB
VmStk: 84 kB
VmExe: 832 kB
VmLib: 6468 kB
VmPTE: 108 kB
Threads: 1
SigQ: 0/8190
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001010
SigCgt: 0000000188020001
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
Cpus_allowed: 0f
Mems_allowed: 00000000,00000001
voluntary_ctxt_switches: 69227121
nonvoluntary_ctxt_switches: 19071
Sin embargo, a menos que las pérdidas de memoria son dramáticos, es difícil detectarlos mirando estadísticas de procesos, porque malloc y free suelen ser bastante abstractos a partir de las llamadas al sistema (brk/sbrk) a las que corresponden.
También puede verificar en/proc/$ {PID}/statm.
podría intentar tener un script de monitor ejecutando vmstat en paralelo con su proceso (tenga en cuenta que esto no es una buena idea si está ejecutando este script varias veces ya que obtendrá múltiples copias vmstat). A continuación, esta secuencia de comandos del monitor puede tomar la memoria libre más el tamaño del búfer y el caché para obtener la cantidad de memoria que el sistema operativo tiene disponible y puede rastrear eso. Luego, si está por debajo de un umbral, puede verificar los procesos más grandes llamando a ps -e -o ... (consulte la página de manual para obtener detalles, pero pruebe con vsz, pcpu, user, pid, args como punto de partida).
Aconsejo ejecutar este monitor como un proceso separado y hacer que mate el proceso deshonesto cuando se vuelve demasiado grande. Puede restringir el conjunto de procesos monitorizados mediante el parámetro
-u user-name
a ps.
Sin embargo, todo esto es un hack (significado en el Reino Unido): la solución correcta es arreglar las fugas, suponiendo que tenga el código.
Prefiero una solución integrada que no dependa de programas/scripts externos. por supuesto, corregir la fuga de memoria es lo correcto, pero en el mundo real a veces hay que comprometerse temporalmente. también, puedo imaginar casos cuando ejecuta código externo que no está bajo su control (piense que apache ejecuta un script php). –
El problema con una única solución integrada es que se vuelve cada vez más complicado. La ventaja de tener programas separados para hacer funciones separadas es que cada uno es individualmente relativamente simple y fácil de depurar e implementar. Una solución integrada parece buena al principio (no hay problemas con la comunicación, usted sabe que se está ejecutando porque el programa principal se está ejecutando, etc.) pero a medida que su sistema crece, la cuestión de la simplicidad se volverá más y más importante – Nick
- 1. ¿Cómo optimizar el uso de la memoria del proceso php?
- 2. Cómo supervisar el uso de memoria en heroku (Node.js)
- 3. NodeJS: proceso del nodo secundario?
- 4. ¿Uso de memoria de un proceso hijo?
- 5. Salir del proceso secundario después de os.fork()
- 6. ¿Cómo supervisar la ejecución del proceso/programa en Windows?
- 7. GDB backtrace en el proceso secundario
- 8. Uso de memoria del proceso actual en C
- 9. cómo supervisar un uso de memoria procesos con el tiempo - ubuntu
- 10. Limitar la memoria de proceso/uso de CPU en Linux
- 11. Cómo sincronizar la ejecución del proceso principal/secundario?
- 12. ¿Cómo devuelve fork() para el proceso secundario
- 13. Adjunte el proceso secundario al depurador
- 14. ¿Cómo matar un proceso secundario por el proceso principal?
- 15. Memoria de proceso Vs Heap - JVM
- 16. Secuencia de salida del proceso secundario en Ruby
- 17. Comprobación del estado de un proceso secundario en C++
- 18. Seguimiento del uso de la CPU y la memoria por proceso
- 19. Límite de memoria de proceso del proceso de 64 bits
- 20. Uso de memoria de subproceso o proceso en Java
- 21. Uso de la memoria del diccionario Python
- 22. Proceso secundario que detecta la muerte del proceso primario en Python
- 23. ¿Cómo saber el uso de la CPU y la memoria de un proceso con WMI?
- 24. Herramientas para supervisar la ejecución del hilo java
- 25. Uso de memoria del Playframework
- 26. ¿Mide el uso de memoria de un proceso en Cocoa/Objectice-C?
- 27. ¿Monitorea el uso de la red de un proceso?
- 28. Monitoreo del uso de memoria propia mediante la aplicación Java
- 29. Señal de captura en el proceso de fondo secundario
- 30. Supervisar la memoria ocupada por mi aplicación en Android
no hay llamadas al sistema para hacer eso? analizar archivos parece una forma bastante sucia de obtener la información. –
Así es como ps y amigos obtienen su información ... – WhirlWind
así que supongo que esa es la mejor manera. ¡Gracias! –