¿Por qué la carga es alta a pesar del hecho de que ni la CPU ni el disco se usan en exceso?

20

Estoy obteniendo el siguiente resultado de top:

Cpu(s): 43.8%us, 32.5%sy,  4.8%ni,  2.0%id, 15.6%wa,  0.2%hi,  1.2%si,  0.0%st
Mem:  16331504k total, 15759412k used,   572092k free,  4575980k buffers
Swap:  4194296k total,   260644k used,  3933652k free,  1588044k cached

la salida de iostat -xk 6muestra lo siguiente:

Device: rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda       0.00   360.20   86.20  153.40  1133.60  2054.40    26.61     1.51    6.27   0.77  18.38
sdb       0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd      22.60   198.80   17.40   31.60   265.60   921.60    48.46     0.18    3.70   1.67   8.20
sdc      16.80   218.20   22.20   23.40   261.60   966.40    53.86     0.21    4.56   1.49   6.78

Según lo anterior, parece que algo debe estar sobrecargado. ¿Pero que?

Preguntas

  1. Si no es el disco duro o la CPU, ¿entonces qué?
  2. Parece que el 15,6% del tiempo de la CPU se pasa esperando. ¿Qué podría estar esperando exactamente?
user4951
fuente
2
¿Cuáles son las especificaciones de la CPU y cuánto es la carga?
sepehr
La carga es superior a 100
user4951
la carga es relativa al número de CPU y núcleos de CPU, ¿cuáles son las especificaciones de CPU de su sistema?
Sepehr

Respuestas:

49

Como punto de aclaración, la carga no está directamente vinculada a la CPU. Este es uno de los conceptos erróneos más comunes sobre la carga. El hecho de que mencione el disco parece reconocer que está al tanto de esto, pero solo quería mencionarlo ya que veo comentarios que indican que algunos creen lo contrario.

La carga se define como el número de procesos que esperan recursos del sistema. Esto es comúnmente CPU, disco o red, pero puede ser cualquier cosa realmente hardware.
Un "proceso" tampoco es necesariamente un proceso completo. Un subproceso se define como un "proceso ligero", y cada subproceso que está esperando aumenta el recuento de carga.


Para averiguar qué procesos son un problema:

Ejecutar top -H( -Hhabilita mostrar hilos)

Los atajos de teclado varían según la versión.

Con la parte superior más nueva (3.3 y posteriores):

Presione fpara mostrar las opciones de campo.
Use las teclas de flecha para ir S = Process Statusy presione s.
Presione qpara volver a la página principal.
Presione Shift+ Rpara invertir la clasificación.

Con la parte superior más antigua (antes de 3.3):

Presione Shift+ opara que aparezcan las opciones de clasificación.
Luego wordenar por estado del proceso.
Luego Enterpara volver a la página principal.
Luego Shift+ Rpara revertir la clasificación.

Luego, en la Scolumna, busque los procesos que tienen Do R(ahora deberían estar en la parte superior). Estos serán procesos que contribuyen a la carga del sistema.

Si el proceso muestra un D, eso significa "suspensión ininterrumpida". Por lo general, esto se produce cuando el proceso está esperando E / S (disco, red, etc.).
Si el proceso muestra un R, eso significa que solo está haciendo un cálculo normal.


Para obtener más información sobre lo que están haciendo esos procesos:

Con la parte superior más nueva (3.3 y posteriores):

Presione fpara mostrar las opciones de campo.
Use las teclas de flecha para ir WCHAN = Sleeping in Functiony presione dpara habilitarlo.
Luego qpara volver a la página principal.

Con la parte superior más antigua (antes de 3.3):

Presione fluego ypara habilitar el WCHANcampo.

Si su sistema tiene las opciones de kernel necesarias, y el archivo wchan está presente en su sistema (no recuerdo dónde está y cómo se llama) , el WCHANcampo debería mostrarle qué función de kernel está ejecutando el proceso actualmente (si el campo solo muestra un -o un ?sobre todo, no tienes soporte).
Un poco de google aquí y deberías estar en camino.

Si no tiene soporte de wchan, siempre puede probar uno stracede los procesos para averiguar qué están haciendo, pero esa es la forma difícil.

Patricio
fuente
Por lo general, solo presiono la flecha izquierda para cambiar la clasificación.
Nemo
2

Los procesos de corta vida útil, como la compilación de trabajos o los procesos fallidos en un bucle, a menudo no son visibles en herramientas de monitoreo como topo iostat, etc.

En tales casos, el marco de auditoría de Linux ayudará

El culpable, un bucle de falla, por ejemplo

while :; do gcc /dev/zero ; done >/dev/null 2>&1

Para usar auditd / auditctl:

apt-get install auditd
auditctl -a task,always
ausearch -i -sc execve

robado del registro todos los inicios del proceso

Comunidad
fuente
Si no aparecen top, entonces es probable que no contribuyan al promedio de carga. Para que contribuya al promedio de carga, tiene que estar en estado de espera durante un largo período de tiempo. Estadísticamente, esto significa que va a aparecer en top. Si no es así, entonces no es un contribuyente significativo.
Patrick
0

Tuve una situación en la que los montajes NFS se desconectaron y desafortunadamente cometí un error y no utilicé la opción de montaje suave, por lo que muchos procesos se estancaron en mi servidor Linux, incluidas las sesiones de monitoreo, lsof e incluso bash ...

Después de desmontar las monturas rotas, el sistema parecía sobrecargado:

top - 00:03:48 up 15 days, 14:56,  3 users,  load average: 29, 21, 20

Esto parecía terrible, pero el uso de la CPU era inferior al 15% y no había E / S de disco. Recibí algunos consejos para pasar por ps, pero esto no ayudó, ya que parecía que los procesos están en su mayoría inactivos.

Luego man psguardé mi noche para dormir, y después de la investigación encontré indicadores de ESTADO muy importantes para mirar, ya que más tarde identifiqué que eran procesos atascados .

Ejecutar:

ps -e v

y busque procesos que tengan Do SLen la columna STAT. Estos fueron como procesos zombies pero no identificados como Z-zombies.

D - medios sobre todo el disco (E / S) la actividad, sino también si se ejecuta ps -e vvarias veces y también iostat 3y no ve ninguna actividad, esto indica que se trata de i atascado E / S .

SL: esto significa que hay bloqueados en la memoria de ese proceso, por lo tanto, si puede identificar que este proceso no debería comportarse así, es el próximo posible candidato si se mantiene durante un período más largo sin cambios.

Después de la investigación, maté uno por uno, y el promedio de carga de mi sistema se volvió normal.

Arunas Bartisius
fuente