¿Cómo registro el uso de la CPU por proceso?

18

Tengo una caja en Linode que está pasando por un comportamiento extraño. De vez en cuando, la E / S de la CPU y el disco se disparará al 100% y el servidor dejará de responder y deberá iniciarse. Me gustaría investigar mejor lo que está sucediendo, pero no sé cómo encontrar quién es responsable de toda esa CPU y E / S. Estoy ejecutando Gentoo 2.6.18.

Helder S Ribeiro
fuente

Respuestas:

20

Podrías intentar hacer algo como esto:

while true; do ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10 >> logfile.txt; printf "\n" >> logfile.txt; sleep 3; done

eso le mostraría los diez principales procesos en términos de uso de CPU. Puede cambiar el número de procesos que se muestran cambiando el 10 en "head -10" a un número diferente, y con qué frecuencia se actualiza cambiando el 3 en "sleep 3" o sacando la parte "sleep 3" por completo.

Shawn
fuente
55
Asegúrate de que tienes algún tipo de sueño allí, de lo contrario hay una buena probabilidad de que su proceso de shell estará siempre en la parte superior 10. :)
jedberg
Creo que sort -nrsería mejor ordenar numéricamente (al menos en mi ubuntu / debian boxen)
sehe
2
Por cierto, debe darle a este proceso la máxima prioridad, para que siga siendo útil durante los picos de alta carga (que es el punto de su vida, después de todo).
spacediver
12

Echa un vistazo encima, escribirá un registro binario de casi todo lo que posiblemente quieras y luego puedes usar una parte superior como gui para pasar por los segmentos de tiempo del día (el valor predeterminado es tomar los datos cada 5 minutos). http://www.atcomputing.nl/Tools/atop/

ScottZ
fuente
6

Creo que Munin es una de las herramientas de seguimiento de las mercancías que ayudarán a su conseguir algo de información sobre las actividades de su caja. Además, hay alguna herramienta de línea de comandos como sar , iostat, ps, top para tal uso.

Ali Mezgani
fuente
5

Las otras respuestas solo le han mostrado cómo puede ver lo que está sucediendo actualmente, lo que no ayuda si el sistema se ha reiniciado.

Si desea que esta información se registre para la posteridad (o facturación, o cualquier otro uso que también pueda tener), lo que desea es la contabilidad de procesos.

Aquí hay un CÓMO que encontré, pero seré sincero: ha pasado una década desde que utilicé la contabilidad de procesos.

http://tldp.org/HOWTO/Process-Accounting/

Rob F
fuente
2

Un enfoque más fácil de usar para la solución de shawn para monitoreo casi en tiempo real:

while true; do clear; ps -eo pcpu,pmem,pid,user,args --sort=-pcpu c|head -20; sleep 1; done

Esto proporcionará una vista estática de los 20 procesos principales que se actualizarán cada 1 segundo. La opción "c" en el comando ps imprimirá el nombre ejecutable del proceso en lugar del comando args completo. Puede omitir esta opción si necesita toda la información del comando en su lugar. También se agregó la columna de% de uso de memoria.

manolis
fuente
1

¿Gentoo no tiene el comando "superior" también?

machine:~/# top

debería darle las estadísticas de ejecución de qué programas causan la mayor carga.

Emigioso
fuente
Sí, lo sé, pero me gustaría tener eso registrado para poder ver el historial más tarde. Cuando la CPU aumenta, la máquina deja de responder, por lo que no puedo iniciar sesión y correr toppara ver quién es el culpable. Quiero volver más tarde y ver qué proceso lo hizo.
Helder S Ribeiro