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):
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í:
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:
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:
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.