Pourquoi la charge est élevée malgré le fait qu'aucun processeur ou disque n'est surutilisé

20

J'obtiens la sortie suivante 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 sortie de iostat -xk 6montre ce qui suit:

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

Sur la base de ce qui précède, il semble que quelque chose doit être surchargé. Mais quoi?

Des questions

  1. Si ce n'est pas le disque dur ou le CPU, alors quoi?
  2. Il semble que 15,6% du temps du processeur soit passé à attendre. Que pouvait-il attendre exactement?
user4951
la source
2
quelles sont les spécifications du processeur et quelle est la charge?
sepehr
La charge est supérieure à 100
user4951
la charge est relative au nombre de cpu et de cœurs de cpu, quelles sont les spécifications de cpu de votre système?
sepehr

Réponses:

49

À titre de précision, la charge n'est pas directement liée au processeur. C'est l'une des idées fausses les plus courantes sur la charge. Le fait que vous mentionniez le disque semble reconnaître que vous en êtes conscient, mais je voulais juste le mentionner car je vois des commentaires qui indiquent que certains croient le contraire.

La charge est définie comme le nombre de processus en attente sur les ressources système. Il s'agit généralement d'un processeur, d'un disque ou d'un réseau, mais il peut s'agir de tout matériel.
Un "processus" n'est pas nécessairement un processus complet non plus. Un thread est défini comme un "processus léger" et chaque thread en attente augmente le nombre de charges.


Pour déterminer quels processus posent problème:

Exécuter top -H(le -Hpermet d'afficher les threads)

Les raccourcis clavier varient selon la version.

Avec un toit plus récent (3.3 et ultérieur):

Appuyez sur fpour afficher les options de champ.
Utilisez les touches fléchées pour aller à S = Process Statuset appuyez sur s.
Appuyez sur qpour revenir à la page principale.
Appuyez sur Shift+ Rpour inverser le tri.

Avec un haut plus ancien (avant 3.3):

Appuyez sur Shift+ opour afficher les options de tri.
Ensuite, wpour trier par état du processus.
Alors Enterpour revenir à la page principale.
Puis Shift+ Rpour inverser le tri.

Ensuite, dans la Scolonne, recherchez les processus qui ont Dou R(ils devraient maintenant être en haut). Ce seront des processus contribuant à la charge du système.

Si le processus montre un D, cela signifie "sommeil ininterrompu". Habituellement, cela se produit lorsque le processus attend sur les E / S (disque, réseau, etc.).
Si le processus affiche un R, cela signifie qu'il effectue simplement un calcul normal.


Pour en savoir plus sur ce que font ces processus:

Avec un toit plus récent (3.3 et ultérieur):

Appuyez sur fpour afficher les options de champ.
Utilisez les touches fléchées pour aller à WCHAN = Sleeping in Functionet appuyez sur dpour l'activer.
Alors qpour revenir à la page principale.

Avec un haut plus ancien (avant 3.3):

Appuyez sur fpuis ypour activer le WCHANchamp.

Si votre système dispose des options de noyau nécessaires et que le fichier wchan est présent sur votre système (j'oublie où il se trouve et comment il s'appelle) , le WCHANchamp devrait vous indiquer quelle fonction du noyau le processus exécute actuellement (si le champ affiche simplement un -ou un ?sur tout, vous n'avez pas de support).
Un peu de google ici et vous devriez être sur votre chemin.

Si vous n'avez pas de support, vous pouvez toujours essayer straceles processus pour savoir ce qu'ils font, mais c'est la voie difficile.

Patrick
la source
J'appuie généralement sur la flèche gauche pour modifier le tri.
Nemo
2

Les processus de courte durée de vie, comme les travaux de compilation ou les processus défaillants dans une boucle, ne sont souvent pas visibles dans les outils de surveillance tels que topou iostat, etc.

Dans de tels cas, Linux Audit Framework aidera

Le coupable, une boucle d'échec par exemple

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

Pour utiliser auditd / auditctl:

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

volé dans le journal tous les lancements de processus

Communauté
la source
S'ils n'apparaissent pas top, ils ne contribuent probablement pas à la charge moyenne. Pour qu'il contribue à la charge moyenne, il doit être dans un état d'attente pendant une longue période. Statistiquement, cela signifie que cela va apparaître top. Si ce n'est pas le cas, ce n'est pas un contributeur important.
Patrick
0

J'ai eu une situation où les montages NFS se sont déconnectés et malheureusement j'ai fait une erreur et n'ai pas utilisé l'option de montage souple, donc beaucoup de processus bloqués sur mon serveur Linux, y compris la surveillance, lsof et même des sessions bash ....

Après avoir démonté les supports cassés, le système semblait surchargé:

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

Cela semblait terrible, mais l'utilisation du processeur était inférieure à 15% et il n'y avait pas d'E / S disque. J'ai reçu quelques conseils pour passer par ps, mais cela n'a pas aidé car il semblait que les processus sont principalement en sommeil.

Ensuite, man psj'ai économisé ma nuit pour dormir et après enquête, j'ai trouvé des drapeaux STATUS très importants à regarder, car ils ont identifié plus tard qu'il s'agissait de processus bloqués .

Exécuter:

ps -e v

et recherchez les processus qui ont Dou SLdans la colonne STAT. C'étaient des processus zombies mais non identifiés comme des z-zombies.

D - l' activité des moyens essentiellement disque (E / S), mais aussi si vous exécutez ps -e vplusieurs fois et aussi iostat 3et voir aucune activité, cela indique que cela est bloqué i / o .

SL - cela signifie qu'il y a des pages verrouillées verrouillées dans la mémoire de ce processus, donc si vous pouvez identifier que ce processus ne devrait pas se comporter comme ça, c'est le prochain candidat possible s'il persiste plus longtemps sans changement.

Après enquête, j'ai tué un par un et la charge moyenne de mon système est devenue normale.

Arunas Bartisius
la source