gestion - ver procesos de un usuario linux
Determinando el motivo de un proceso estancado en Linux (3)
Estoy tratando de determinar el motivo de un proceso estancado en Linux. Es una aplicación de telecomunicaciones que funciona bajo una carga bastante pesada. Hay un proceso separado para cada uno de los 8 tramos T1. De vez en cuando, uno de los procesos será muy poco receptivo, hasta unos 50 segundos antes de que se anote un evento en el registro del proceso normalmente muy ocupado.
Es probable que algún recurso del sistema se quede corto. Lo obvio, el uso de la CPU, parece estar bien.
¿Qué utilidades de Linux podría ser mejor para capturar y analizar este tipo de cosas, y ser lo más discreto posible, ya que este es un sistema muy cargado? Tendría que ser procesos más que orientados al sistema, parecería. Tal vez el monitoreo continuo de / proc / pid / XX? Top no parece ser demasiado útil aquí.
Gracias - strace suena útil. Capturar el proceso en el momento correcto será parte de la diversión. Se me ocurrió un plan para escribir periódicamente una marca de tiempo en la memoria compartida, luego monitorear con otro proceso. El envío de un SIGSTOP me permitiría al menos examinar la pila de aplicaciones con gdb. No sé si el esfuerzo en un proceso en pausa me dirá mucho, pero tal vez pueda entonces ponerme en marcha y ver qué dice. O enciéndase y golpee el proceso con un SIGCONT.
Puede ejecutar el programa en cuestión y ver qué llamadas al sistema está realizando.
Si puede detectar este "momento de falta de respuesta", entonces puede usar strace para adjuntarse al proceso en cuestión durante ese tiempo y tratar de averiguar dónde "duerme":
strace -f -o LOG -p <pid>
Método más ligero, pero menos confiable:
Cuando el proceso se bloquea, utilice top / ps / gdp / strace / ltrace para averiguar el estado del proceso (por ejemplo, si espera en "seleccionar" o consume 100% de CPU en alguna llamada a la biblioteca)
Conociendo la naturaleza general de la llamada en cuestión, adapte la invocación de strace para registrar syscalls específicos o grupos de syscall. Por ejemplo, para registrar solo syscalls relacionados con acceso a archivos, use:
strace -e file -f -o LOG ....
Si la barra es una herramienta demasiado pesada para ti, prueba a monitorear:
Uso de memoria con "vmstat 1> / some / log": tal vez el proceso se está intercambiando (o saliendo) durante ese tiempo
Uso de IO con vmstat / iotop: tal vez algún otro proceso esté agotando los discos
/ proc / interrupts - ¿Tal vez el controlador de su tarjeta T1 está teniendo problemas?