Saltar al contenido

¿Cómo monitorear el uso de CPU / memoria de un solo proceso?

Luis, miembro de nuestro equipo, nos hizo el favor de redactar esta crónica ya que conoce muy bien el tema.

Solución:

En Linux, top en realidad, admite centrarse en un solo proceso, aunque, naturalmente, no tiene un gráfico de historial:

top -p PID

También está disponible en Mac OS X con una sintaxis diferente:

top -pid PID

Procpath

Actualización 2020 (solo Linux / procfs). Volviendo al problema del análisis de procesos con suficiente frecuencia y no estando satisfecho con las soluciones que describí a continuación originalmente, decidí escribir las mías. Es un paquete CLI de Python puro que incluye su par de dependencias (sin Matplotlib pesado), potencialmente puede trazar muchas métricas de procfs, consultas JSONPath al árbol de procesos, tiene diezma / agregación básica (Ramer-Douglas-Peucker y promedio móvil), filtrado por rangos de tiempo y PID, y un par de otras cosas.

pip3 install --user procpath

Aquí tienes un ejemplo con Firefox. Esto registra todos los procesos con “firefox” en su cmdline (la consulta por un PID se vería así '$..children[?(@.stat.pid == 42)]') 120 veces una vez por segundo.

procpath record -i 1 -r 120 -d ff.sqlite '$..children[?("firefox" in @.cmdline)]'

Trazar el uso de RSS y CPU de un solo proceso (o varios) de todos los registrados se vería así:

procpath plot -d ff.sqlite -q cpu -p 123 -f cpu.svg
procpath plot -d ff.sqlite -q rss -p 123 -f rss.svg

Los gráficos se ven así (en realidad son SVG de Pygal interactivos):

RSS

UPC

psrecord

Las siguientes direcciones gráfico de historia de algún tipo. Pitón psrecord paquete hace exactamente esto.

pip install psrecord                             # local user install
sudo apt-get install python-matplotlib python-tk # for plotting; or via pip

Para un solo proceso es el siguiente (detenido por Ctrl + C):

psrecord $(pgrep proc-name1) --interval 1 --plot plot1.png

Para varios procesos, el siguiente script es útil para sincronizar los gráficos:

#!/bin/bash    
psrecord $(pgrep proc-name1) --interval 1 --duration 60 --plot plot1.png &
P1=$!
psrecord $(pgrep proc-name2) --interval 1 --duration 60 --plot plot2.png &
P2=$!
wait $P1 $P2
echo 'Done'

Los gráficos se ven así:
ejemplo de psrecord

perfil_memoria

El paquete proporciona muestras solo de RSS (más algunas opciones específicas de Python). También puede registrar el proceso con sus procesos secundarios (ver mprof --help).

pip install memory_profiler
mprof run /path/to/executable
mprof plot

De forma predeterminada, esto muestra un (python-tk puede ser necesario) explorador de gráficos que se puede exportar:

mprof

pila de grafito y statsd

Puede parecer una exageración para una simple prueba única, pero para algo como una depuración de varios días es, sin duda, razonable. Un práctico todo en uno raintank/graphite-stack (de los autores de Grafana) imagen y psutil y statsd cliente. procmon.py proporciona una implementación.

$ docker run --rm -p 8080:3000 -p 8125:8125/udp raintank/graphite-stack

Luego, en otra terminal, después de iniciar el proceso de destino:

$ sudo apt-get install python-statsd python-psutil # or via pip
$ python procmon.py -s localhost -f chromium -r 'chromium.*'

Luego abriendo Grafana en http: // localhost: 8080, autenticación como admin:admin, configurando la fuente de datos https: // localhost, puede trazar un gráfico como:

grafana chart

pila de grafito y telegraf

En lugar de que el script de Python envíe las métricas a Statsd, telegraf (y procstat complemento de entrada) se puede utilizar para enviar las métricas a Graphite directamente.

Mínimo telegraf la configuración se parece a:

[agent]
  interval = "1s"

[[outputs.graphite]]
  servers = ["localhost:2003"]
  prefix = "testprfx"

[[inputs.procstat]]
  pid_file = "/path/to/file/with.pid"

Entonces ejecuta la línea telegraf --config minconf.conf. La parte de Grafana es la misma, excepto los nombres de las métricas.

pidstat

pidstat (parte de sysstat package) puede producir una salida que se puede analizar fácilmente. Es útil en caso de que necesite métricas adicionales de los procesos, por ejemplo, los 3 grupos más útiles (CPU, memoria y disco) contienen: %usr, %system, %guest, %CPU, minflt/s, majflt/s, VSZ, RSS, %MEM, kB_rd/s, kB_wr/s, kB_ccwr/s. Lo describí en una respuesta relacionada.

htop es un gran reemplazo para top. Tiene … ¡Colores! Atajos de teclado simples! Desplácese por la lista con la flecha keys! ¡Mata un proceso sin salir y sin tomar nota del PID! ¡Marque varios procesos y elimínelos a todos!

Entre todas las funciones, la página de manual dice que puede presionar F para seguir un proceso.

De verdad, deberías intentarlo htop. Yo nunca comencé top de nuevo, después de la primera vez que usé htop.

Mostrar un solo proceso:

htop -p PID

Sección de Reseñas y Valoraciones

No se te olvide dar recomendación a esta noticia si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *