GNU/Linux >> Tutoriales Linux >  >> Linux

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

Solución 1:

Hay un par de formas posibles de hacer esto. Tenga en cuenta que es completamente posible que muchos procesos en un escenario fuera de control causen 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 en intervalos de diez minutos. Sugeriría que este sea su primer puerto de escala, ya que produce los datos más valiosos y confiables para trabajar.

Hay un problema con esto, principalmente si la caja entra en un bucle de CPU descontrolado y produce una carga enorme: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 perderse la salida !

La segunda forma de buscar esto es habilitar la contabilidad de procesos. Posiblemente más 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, necesitará tiempo para ejecutarse.

Habiendo sido ejecutado, digamos 24 horas, puede ejecutar dicho comando (que producirá un resultado como este)

# 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 así:

  1. Número 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 estará buscando son los tipos de proceso 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 cuenta correctamente cuando está activada cuando se generan los procesos, por lo que probablemente sea mejor reiniciar el sistema después de habilitarlo para garantizar que se tengan en cuenta todos los servicios.

Esto, de ninguna manera, le da una idea definitiva de qué proceso podría ser la causa de este problema, pero podría darle 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 debe iniciar sesión siempre, ya que es una característica del kernel y, a diferencia de pidstat, siempre producirá resultados incluso durante una carga pesada.

La última opción disponible también usa la contabilidad de procesos, por lo que puede 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 estadísticas de 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 podría darle algunas pistas sobre lo que podría estar causando el problema.

Solución 2:

Atop es un demonio particularmente útil para buscar desgloses a nivel de proceso y, de forma predeterminada, archiva estos datos durante 28 días. Además de presentar una increíble interfaz de monitoreo en tiempo real, puede especificar esos archivos de registro para abrirlos y revisarlos.

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.

Solución 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 excede algún 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.


Linux
  1. ¿Recuperar el uso de la CPU y el uso de la memoria de un solo proceso en Linux?

  2. ¿Cómo calcular el uso de CPU de un proceso por PID en Linux desde C?

  3. Limitar el uso de memoria/CPU de proceso en Linux

  4. uso de comodines de linux en cp y mv

  5. Comando superior de Linux:¿Qué somos, sy, ni, id, wa, hi, si y st (para uso de CPU)?

Comando Cat de Linux:uso y ejemplos

3 consejos para mejorar el rendimiento de los procesos de Linux con prioridad y afinidad

Cómo obtener el uso de la CPU de un solo proceso en Linux

Historia de Unix y Linux

Cómo encontrar los principales procesos en ejecución por memoria y uso de CPU en Linux

Cómo verificar el uso o la utilización de la CPU de Linux