2009-04-19 13 views
5

Necesito obtener métricas de utilización de CPU para todos los subprocesos en un proceso.Cómo obtener las métricas de uso de CPU de subprocesos en Redhat Linux

  • del sistema operativo = RedHat Linux
  • lenguaje de programación C++ = usando POSIX
  • requisitos = necesitan tomar muestras cada pocos segundos indefinetly, no sólo para una instantánea en el tiempo.
  • limitaciones = no se les permite escribir código adicional en hilo

    Sé que puede utilizar el comando "top", pero ¿qué otras formas hay? ¿Hay una bandera para "ps"?

Gracias de antemano por toda su ayuda.

Respuesta

0

Puede hacer esto con gnu gprof que está disponible en Linux. Creo que afirman que admiten subprocesos, pero esto es más complicado que la creación de perfiles a nivel de proceso, por lo que es posible que no obtenga los resultados que está buscando.

Aquí hay un howto para su situación.

5

Puede leer el contenido de /proc/[your PID]/stat para obtener información sobre todo el proceso y, si tiene un kernel 2.6, también existe /proc/[your PID]/task/[thread ID]/stat con la información de cada uno de los hilos. (Ver here)

En concreto, se encuentran estos dos campos:

El número de unidades de tiempo que este proceso se ha planificado en modo de usuario.

stime% lu

El número de unidades de tiempo que este proceso ha sido programado en modo de núcleo.

cutime% ld

La parte problemática aquí es la unidad en la que se dan los valores. Un jiffy es de 1/HZ segundos, donde HZ es la frecuencia de tick del reloj del núcleo y la determinación de esta velocidad del reloj es la parte difícil.

Si necesita esto solo para un sistema específico, puede hacer algunas pruebas o mirar los encabezados de su kernel y codificar este valor en su programa. Si desea saber cómo determinarlo de una manera más general, puede ver cómo una herramienta como top lo está haciendo al mirar its source code (vea la función old_Hertz_hack() y los comentarios relacionados)

+0

Descubrí una forma de obtener el valor de Hz en una máquina en particular: cat/boot/config-'uname -r' | grep HZ –

1

Posiblemente una forma más simple de haciendo esto es usar getrusage con la extensión específica de linux de RUSAGE_THREAD. Una vez que tenga estos tiempos, puede restar los tiempos de la última vez que tomó una muestra y dividir por el tiempo real transcurrido desde su última muestra. Eso significa que obtienes el uso de la CPU como un porcentaje.

Para documentación específica de Linux, vea el rusage liunx man page.

0

puede usar el comando "superior" para buscar primero el Id del proceso.

Después de eso, puede utilizar el siguiente comando para único uso pantalla de CPU/memoria para el proceso

top -p {pid} 

Después de eso, puede presionar "Shift" + "h" para mostrar los hilos

Cuestiones relacionadas