Me gustaría monitorear el uso de memoria / CPU de un proceso en tiempo real. Similar toppero 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
toprealidad 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'andhtopes 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é detopnuevo, después de la primera vez que lo uséhtop.Mostrar un solo proceso:
htop -p PIDfuente
topTambién tiene colores. Presionez.toptiene 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 PIDfuncionará 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
psrecordpaquete 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-tkexplorador 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-stackimagenpsutilystatsdcliente todo en uno (de los autores de Grafana) y cliente.procmon.pyProporciona 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(yprocstatel complemento de entrada) se puede usar para enviar las métricas a Graphite directamente.La
telegrafconfiguració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 ysysdigno puede filtrarprocinfoeventos por proceso en el hora de escribir. Sin embargo, esto debería ser posible con un cincel personalizado (unasysdigextensión escrita en Lua).fuente
pgrep --helpal rescate. Hay al menos--newesty--oldest.Ctrl+Cen 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 1234donde 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.topla 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
topyawkuno 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
$delayembargo, esto no dará buenos resultados para grandes , porque la marca de tiempo impresa está realmente$delayatrasada debido a cómotopfunciona 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
toprealmente 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
psYo 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
pscomando no devolverá "éxito" y elwhileciclo 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