Me gustaría monitorear el uso de memoria / CPU de un proceso en tiempo real. Similar top
pero dirigido a un solo proceso, preferiblemente con un gráfico histórico de algún tipo.
shell
process
monitoring
top
Josh K
fuente
fuente
Respuestas:
En Linux, en
top
realidad admite centrarse en un solo proceso, aunque naturalmente no tiene un gráfico de historial:Esto también está disponible en Mac OS X con una sintaxis diferente:
fuente
top -p `pgrep -f /usr/bin/kvm`
.hostname
_pid.txt; exit'andhtop
es un gran reemplazo paratop
. Tiene ... colores! Atajos de teclado simples! ¡Desplácese por la lista con las teclas de flecha! ¡Mata un proceso sin salir y sin tomar nota del PID! ¡Marca múltiples procesos y mátalos a todos!Entre todas las características, la página de manual dice que puede presionar Fpara seguir un proceso.
Realmente, deberías intentarlo
htop
. Nunca comencé detop
nuevo, después de la primera vez que lo uséhtop
.Mostrar un solo proceso:
htop -p PID
fuente
top
También tiene colores. Presionez
.top
tiene colores! Lástima que sus colores sean bastante inútiles, especialmente en comparación conhtop
(que desvanece los procesos de otros usuarios y resalta el nombre base del programa).htop -p PID
funcionará también, al igual que el ejemplo dado por @ Michael Mrozek.psrecord
El siguiente aborda el gráfico del historial de algún tipo . El
psrecord
paquete Python hace exactamente esto.Para un solo proceso es el siguiente (detenido Ctrl+C):
Para varios procesos, el siguiente script es útil para sincronizar los gráficos:
Los gráficos se ven así:
memory_profiler
El paquete proporciona muestreo solo de RSS (más algunas opciones específicas de Python). También puede grabar el proceso con sus procesos hijos (ver
mprof --help
).De manera predeterminada, aparece un
python-tk
explorador de gráficos basado en Tkinter ( puede ser necesario) que se puede exportar:grafito-stack & statsd
Puede parecer una exageración para una prueba simple, pero para algo como una depuración de varios días es, sin duda, razonable. Una práctica
raintank/graphite-stack
imagenpsutil
ystatsd
cliente todo en uno (de los autores de Grafana) y cliente.procmon.py
Proporciona una implementación.Luego, en otra terminal, después de iniciar el proceso de destino:
Luego, abriendo Grafana en http: // localhost: 8080 , autenticación como
admin:admin
, configurando el origen de datos https: // localhost , puede trazar un gráfico como:grafito-pila y telegraf
En lugar de que el script Python envíe las métricas a Statsd,
telegraf
(yprocstat
el complemento de entrada) se puede usar para enviar las métricas a Graphite directamente.La
telegraf
configuración mínima se ve así:Luego corre la línea
telegraf --config minconf.conf
. La parte de Grafana es la misma, excepto los nombres de métricas.sysdig
sysdig
(disponible en los repositorios de Debian y Ubuntu) con la interfaz de usuario sysdig-inspect parece muy prometedora, brindando detalles extremadamente finos junto con la utilización de la CPU y RSS, pero desafortunadamente la interfaz de usuario no puede procesarlos ysysdig
no puede filtrarprocinfo
eventos por proceso en el hora de escribir. Sin embargo, esto debería ser posible con un cincel personalizado (unasysdig
extensión escrita en Lua).fuente
pgrep --help
al rescate. Hay al menos--newest
y--oldest
.Ctrl+C
en el proceso psrecord simplemente se cierra sin guardar un gráfico, debe finalizar el proceso bajo prueba.Para usar esa información en un script, puede hacer esto:
calcPercCpu.sh
use like:
calcPercCpu.sh 1234
donde 1234 es el pidPara el $ nPid especificado, medirá el promedio de 10 instantáneas del uso de la CPU en un total de 1 segundo (retraso de 0.1s cada una * nTimes = 10); eso proporciona un resultado bueno y rápido de lo que está sucediendo en el momento.
Ajusta las variables a tus necesidades.
fuente
$nPercCpu
): shell, top, grep, sed, cut ... bc. Muchos, si no todos, podrían fusionarse en 1 script Sed o Awk.top
la producción es un promedio superior$delay
. Cf. Cómo calcular el uso de la CPUNormalmente uso los siguientes dos:
Calibrador HP : es una muy buena herramienta para monitorear procesos, también puede verificar el gráfico de llamadas y otra información de bajo nivel. Pero tenga en cuenta que es gratis solo para uso personal.
daemontools : una colección de herramientas para gestionar servicios UNIX
fuente
El uso de
top
yawk
uno podría crear fácilmente, por ejemplo, un registro separado por comas del uso de% CPU ($9
) +% MEM ($10
) que luego se puede alimentar a cualquier herramienta de estadísticas y gráficos.La salida será como
Sin
$delay
embargo, esto no dará buenos resultados para grandes , porque la marca de tiempo impresa está realmente$delay
atrasada debido a cómotop
funciona la salida. Sin entrar en demasiados detalles, una forma simple de evitar esto es registrar el tiempo proporcionado portop
:Entonces la marca de tiempo es precisa, pero la salida aún se retrasará
$delay
.fuente
Si conoce el nombre del proceso, puede usar
fuente
Si tiene una distribución Linux reducida donde top no tiene la opción por proceso (-p) u opciones relacionadas, puede analizar la salida del comando top para el nombre de su proceso para obtener la información de uso de la CPU por proceso.
8 representa el uso de CPU por proceso en la salida del comando superior en mi distribución de Linux incrustada
fuente
No hay suficiente reputación para comentar, pero para psrecord también puede llamarlo directamente, de manera programática, directamente en Python:
fuente
Si necesita los promedios durante un período de tiempo de un proceso específico, pruebe la opción acumulativa -c de top:
"-c a" se encuentra en la parte superior para Mac 10.8.5.
Para Scientific Linux, la opción es -S, que se puede configurar de forma interactiva.
fuente
top
realmente proporcionan esta función. Mi versión en Fedora 19 no. Lo mismo también en Ubuntu 13.04.Llego un poco tarde aquí, pero compartiré mi truco en la línea de comandos usando solo el predeterminado
ps
Yo uso esto como una frase. Aquí la primera línea dispara el comando y almacena el PID en la variable. Luego, ps imprimirá el tiempo transcurrido, el PID, el porcentaje de CPU que utiliza, el porcentaje de memoria y la memoria RSS. También puede agregar otros campos.
Tan pronto como finalice el proceso, el
ps
comando no devolverá "éxito" y elwhile
ciclo finalizará.Puede ignorar la primera línea si el PID que desea perfilar ya se está ejecutando. Simplemente coloque la identificación deseada en la variable.
Obtendrá una salida como esta:
fuente