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 6
montre 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
- Si ce n'est pas le disque dur ou le CPU, alors quoi?
- Il semble que 15,6% du temps du processeur soit passé à attendre. Que pouvait-il attendre exactement?
performance
load
user4951
la source
la source
Réponses:
À 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-H
permet 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 Status
et 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
S
colonne, recherchez les processus qui ontD
ouR
(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 Function
et 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
WCHAN
champ.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
WCHAN
champ 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
strace
les processus pour savoir ce qu'ils font, mais c'est la voie difficile.la source
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
top
ou iostat, etc.Dans de tels cas, Linux Audit Framework aidera
Le coupable, une boucle d'échec par exemple
Pour utiliser auditd / auditctl:
volé dans le journal tous les lancements de processus
la source
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îtretop
. Si ce n'est pas le cas, ce n'est pas un contributeur important.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é:
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 ps
j'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:
et recherchez les processus qui ont
D
ouSL
dans 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 v
plusieurs fois et aussiiostat 3
et 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.
la source