2011-01-28 11 views
8

¿De dónde obtiene la aplicación top sus datos en Linux? Me interesarían los datos load/pid de la CPU en tiempo real. (Leí casi toda la documentación en la página man de/proc/pid, pero la información no está allí).dónde obtiene la parte superior los datos en tiempo real

El pid es un jboss. Necesito el peso ligero de los datos (para ser exportado fácilmente).

+0

La carga es una métrica de todo el sistema, no de proceso. ¿Quisiste decir procesar el uso de la CPU? –

+0

¿estás seguro de que la información no está allí? 'find/proc/1' por ejemplo, hay MUCHAS cosas, ¿lo pasó todo? –

+0

Lo hice todo :) – Mark

Respuesta

4

como se documenta en proc(5), en el archivo /proc/(pid)/stat usted tiene los campos:

utime %lu 

Cantidad de tiempo que este proceso ha sido programado en modo de usuario, medido en ciclos de reloj (dividir por sysconf (_SC_CLK_TCK). Este incluye el tiempo de invitado, tiempo_usuario (tiempo dedicado a ejecutar una CPU virtual, consulte a continuación), de modo que las aplicaciones que son desconoce el campo de tiempo de invitado do no pierde ese tiempo de sus cálculos .

stime %lu 

Cantidad de tiempo que este proceso se ha programado en modo kernel , medida en ciclos de reloj (dividir por sysconf (_SC_CLK_TCK).

Para llegar uso de la CPU para un proceso específico, use esos campos. El proceso toplevel agregará el uso de la CPU en todos los hilos, para un desglose por hilo, puede encontrar los otros hilos en /proc/(pid)/task.

Si prefiere ser notificado cuando C El tiempo de PU excede cierto umbral, puede usar clock_getcpuclockid para obtener un control de su reloj de tiempo de CPU, luego timer_create o timerfd para recibir notificaciones cuando llegue a un nivel específico. Sin embargo, tenga en cuenta que los temporizadores de cputime de proceso cruzado son una característica opcional en la especificación POSIX y pueden no ser compatibles (no lo he probado).

+0

realmente creo "ps -Lp (pid) opcpu "agrega todos los hilos, ¿no? Desafortunadamente, ps solo da instantáneas de esa carga de CPU/subproceso (no se puede usar en monitoreo en tiempo real) y agrega en el script bash los 300 subprocesos en ese jboss, al "cat" -ing todo el archivo específico para ese pids de niños parece algo poco confiable. – Mark

+0

@Xander, después de comprobarlo, resulta que el proceso toplevel se agrega a todos los hilos. Entonces puede usar el archivo de estadísticas para monitorear. También agregué algunas notas sobre clock_getcpuclockid, que también pueden ser útiles. – bdonlan

11

¡En caso de duda, utilice strace (1)!

open("/proc/2/stat", O_RDONLY) = 4 
open("/proc/2/statm", O_RDONLY) = 4 
open("/proc/3/stat", O_RDONLY) = 4 
open("/proc/3/statm", O_RDONLY) = 4 
+0

hola, gracias por su sugerencia! es genial. el único problema es que después de un volcado de velocidad no puedo escribir donde está la carga de la CPU (porque al analizar los archivos que recomiendas no pude encontrar lo que estaba buscando ...) – Mark

Cuestiones relacionadas