Uso de CPU de Linux e historial de ejecución de procesos

38

¿Hay alguna forma de ver qué proceso (s) causaron el mayor uso de CPU?

Tengo AMAZON EC2 Linux cuya utilización de CPU alcanza el 100 por ciento y me obliga a reiniciar el sistema. Ni siquiera puedo iniciar sesión a través de SSH (Uso de masilla).

¿Hay alguna manera de ver qué causa un uso de CPU tan alto y qué proceso causó eso?

Conozco sary topordeno, pero no pude encontrar el historial de ejecución de procesos en ningún lado. Aquí está la imagen de la herramienta de monitoreo de Amazon EC2, pero me gustaría saber qué proceso causó eso:

ingrese la descripción de la imagen aquí

También he intentado, ps -eo pcpu,args | sort -k 1 -r | head -100pero no tuve suerte, encontrar un uso de CPU tan alto.

PMoubed
fuente

Respuestas:

34

Hay un par de formas posibles de hacer esto. Tenga en cuenta que es completamente posible sus muchos procesos en un escenario desbocado que causa esto, no solo uno.

La primera forma es configurar pidstat para que se ejecute en segundo plano y produzca datos.

pidstat -u 600 >/var/log/pidstats.log & disown $!

Esto le dará una perspectiva bastante detallada del funcionamiento del sistema a intervalos de diez minutos. Sugeriría que este sea su primer puerto de escala, ya que produce los datos más valiosos / confiables para trabajar.

Hay un problema con esto, principalmente si la caja entra en un bucle de CPU fuera de control y produce una gran carga: no está garantizado que su proceso real se ejecute de manera oportuna durante la carga (si es que lo hace), por lo que podría perder la salida !

La segunda forma de buscar esto es habilitar la contabilidad de procesos. Posiblemente más de una opción a largo plazo.

accton on

Esto habilitará la contabilidad de procesos (si aún no se ha agregado). Si no se estaba ejecutando antes, esto necesitará tiempo para ejecutarse.

Habiendo sido ejecutado, por ejemplo, durante 24 horas, puede ejecutar dicho comando (que producirá una salida como esta)

# sa --percentages --separate-times
     108  100.00%       7.84re  100.00%       0.00u  100.00%       0.00s  100.00%         0avio     19803k
       2    1.85%       0.00re    0.05%       0.00u   75.00%       0.00s    0.00%         0avio     29328k   troff
       2    1.85%       0.37re    4.73%       0.00u   25.00%       0.00s   44.44%         0avio     29632k   man
       7    6.48%       0.00re    0.01%       0.00u    0.00%       0.00s   44.44%         0avio     28400k   ps
       4    3.70%       0.00re    0.02%       0.00u    0.00%       0.00s   11.11%         0avio      9753k   ***other*
      26   24.07%       0.08re    1.01%       0.00u    0.00%       0.00s    0.00%         0avio      1130k   sa
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28544k   ksmtuned*
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     28096k   awk
      14   12.96%       0.00re    0.01%       0.00u    0.00%       0.00s    0.00%         0avio     29623k   man*
       7    6.48%       7.00re   89.26%       0.00u    0.00%       0.00s    

Las columnas están ordenadas como tales:

  1. Numero de llamadas
  2. Porcentaje de llamadas
  3. Cantidad de tiempo real dedicado a todos los procesos de este tipo.
  4. Porcentaje.
  5. Tiempo de CPU del usuario
  6. Porcentaje
  7. Tiempo de CPU del sistema.
  8. Promedio de llamadas IO.
  9. Porcentaje
  10. Nombre del comando

Lo que buscará son los tipos de procesos que generan la mayor cantidad de tiempo de CPU del usuario / sistema.

Esto desglosa los datos como la cantidad total de tiempo de CPU (la fila superior) y luego cómo se ha dividido ese tiempo de CPU. La contabilidad de procesos solo se contabiliza correctamente cuando está activada cuando se generan procesos, por lo que probablemente sea mejor reiniciar el sistema después de habilitarlo para garantizar que se contabilicen todos los servicios.

Esto, de ninguna manera te da una idea definitiva de qué proceso podría ser la causa de este problema, pero podría darte una buena sensación. Como podría ser una instantánea de 24 horas, existe la posibilidad de resultados sesgados, así que tenlo en cuenta. También siempre debe iniciar sesión, ya que es una característica del núcleo y, a diferencia de pidstat, siempre producirá resultados incluso durante una carga pesada.

La última opción disponible también utiliza la contabilidad de procesos para que pueda activarla como se indicó anteriormente, pero luego use el programa "lastcomm" para producir algunas estadísticas de los procesos ejecutados en el momento del problema junto con las estadísticas de la CPU para cada proceso.

lastcomm | grep "May  8 22:[01234]"
kworker/1:0       F    root     __         0.00 secs Tue May  8 22:20
sleep                  root     __         0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                     root     pts/0      0.00 secs Tue May  8 22:49
sa                   X root     pts/0      0.00 secs Tue May  8 22:49
ksmtuned          F    root     __         0.00 secs Tue May  8 22:49
awk                    root     __         0.00 secs Tue May  8 22:49

Esto también puede darle algunas pistas sobre lo que podría estar causando el problema.

Matthew Ife
fuente
Muy buena y detallada respuesta, buen trabajo!
Bart De Vos
2
Por cierto, si no lo has usado encima, ¡pruébalo! Reúne la misma información que pidstat, pero la presenta en una interfaz que es mucho más adecuada para la exploración interactiva. También tiene un comando atopsar si prefiere informes de estilo sar.
Sciurus
18

Encima es un daemon particularmente útil para analizar desgloses a nivel de proceso y, por defecto, archiva estos datos durante 28 días. Además de presentar una increíble interfaz de monitoreo en tiempo real, puede especificar los archivos de registro para abrir y recorrerlos.

El artículo da una idea de las capacidades, y puede encontrar más en la página de manual .

Es realmente una maravillosa pieza de software.

Jeff Ferland
fuente
3

Programas como psmon y monit pueden ser útiles para usted. Esos pueden monitorear los procesos que se ejecutan en su sistema y si se supera cualquier umbral (uso de CPU, uso de memoria ...), puede configurarlos para que le envíen un informe por correo electrónico sobre lo que está sucediendo.

También es posible reiniciar automáticamente los procesos que se comportan mal.

Janne Pikkarainen
fuente
0

Una solución es escribir un script que se ejecute a través de un minuto cron o en un ciclo de suspensión, y le envíe un correo electrónico / trabajo scp / volcado a un volumen ebs ... con salida relevante (dmesg, pstree -pa y ps aux, probablemente vmstat) en el instante en que encuentra el promedio de carga por encima de un cierto límite ...

rackandboneman
fuente