10 votes

Comment trouver le ou les processus qui monopolisent la machine ?

Scénario : Tout à coup, mon ordinateur est lent. La souris bouge mais les fenêtres mettent du temps à s'ouvrir, etc. uptime dit que la charge est de 7,69 et augmente.

Quel est le moyen le plus rapide de trouver le ou les processus qui sont à l'origine de la charge ?

Maintenant, "top" et les outils similaires ne sont pas la réponse parce qu'ils montrent soit l'utilisation du CPU ou de la mémoire mais pas les deux en même temps. Ce dont j'ai besoin, c'est d'une commande unique que je pourrais taper au fur et à mesure - quelque chose qui déterminerait n'importe quel des éléments suivants

Le système essaie d'échanger 8 Go de RAM sur le disque parce que le processus X ...

ou

le processus X cherche sur tout le disque

ou

le processus X utilise 400% du CPU"

Ce que je recherche, c'est iostat, htop/atop et d'autres outils similaires qui fonctionnent en même temps avec une sortie comme celle-ci :

 1235 cp - Disk trashing
   87 chrome - Uses 2 GB of RAM
  137 nfs_bench - Uses 95% of the network bandwidth

Je ne veux pas d'un outil qui me donne quelques chiffres que je peux analyser, mais un outil qui me dise exactement quel processus est à l'origine de la charge actuelle. Supposons que l'utilisateur devant le clavier sache à peine écrire "processus", mais qu'il soit rapidement dépassé lorsqu'il s'agit de "taille des résidents", de "mémoire virtuelle" ou de "cycle de vie des processus".

Mon argument est le suivant : Un utilisateur remarque un problème. Il peut y avoir des milliers de raisons ... enfin, presque :-) L'utilisateur veut connaître la source du problème.

Les solutions actuelles me donnent beaucoup de chiffres, et j'ai besoin de savoir ce que ces chiffres signifient. Ce que je recherche, c'est un méta-outil. 99% des données ne sont pas pertinentes pour le problème. Donc ce que l'outil devrait faire, c'est rechercher les processus qui monopolisent certaines ressources et ne lister que ceux-là avec "ce processus a besoin de beaucoup de CPU, il produit beaucoup d'IRQs, ce processus alloue beaucoup de RAM (et il continue de croître)".

Cette liste sera relativement courte. Il sera beaucoup plus simple pour un novice de localiser le coupable à partir de cette liste qu'à partir de la sortie de, disons, htop ce qui me donne environ 5000 numéros mais m'oblige à plier moi-même des processus multi-threads (j'ai 50 lignes qui disent VIRT 2750M mais seulement 16 Go de RAM - la machine devrait s'échanger jusqu'à la mort, mais bien sûr, il s'agit d'une mauvaise interprétation des données qui peut se produire rapidement).

6voto

Zds Points 2369

"top" fonctionne raisonnablement bien, tant que vous regardez les bons chiffres. Voyons voir :

top - 13:11:45 up 13 days,  1:13, 21 users,  load average: 0.06, 0.11, 0.26
Tasks: 271 total,   2 running, 267 sleeping,   0 stopped,   2 zombie
Cpu(s): 19.0%us,  6.3%sy,  0.0%ni, 74.0%id,  0.5%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   8183668k total,  8002712k used,   180956k free,    12476k buffers
Swap: 11847900k total,   723480k used, 11124420k free,   767016k cached

Maintenant, si le système est lent parce que le CPU est tout occupé, cela se traduit par des colonnes "us" et "sy" sur la ligne "Cpu(s) :" proches de 100% ensemble.

Si la lenteur est due au swapping, "Mem :" "free" montre des valeurs très basses et "Swap :" "used" des valeurs élevées.

S'il est lent en raison de I/O en général, alors "Cpu(s) :" "wa" indique que le temps est passé en attente d'E/S.

Maintenant, si vous savez que les attentes d'E/S sont le problème, vous pouvez utiliser les programmes "iotop" pour savoir quels processus créent le plus d'E/S.

3voto

Je dois sourire aux réponses car chacune d'entre elles vous dit d'utiliser l'outil X. Le seul problème est que si ce que vous voyez est intermittent, il n'y aura aucun moyen de corréler quoi que ce soit. Un outil comme sar peut aider si vous le faites fonctionner à une fréquence assez élevée, mais je prétends que collectl est encore mieux.

Comme sar vous l'exécutez en tant que démon en installant le RPM et en effectuant les opérations suivantes /etc/init.d/collectl start .

Maintenant, quand vous voyez quelque chose d'anormal, collectl -p /var/log/collectl/filename --top va lire les données et vous montrer les processus les plus importants. Vous auriez également pu simplement exécuter collectl --top et les voir en temps réel. D'ailleurs, tout ce que vous pouvez faire en temps réel, vous pouvez également le lire.

En ce qui concerne la charge du CPU, que se passe-t-il si vous êtes surchargé d'interruptions ? collectl -sC ne montrera pas seulement les charges sur les CPU individuels (ou l'utilisation de -sc pour la charge moyenne), cela montrera comment ils passent leur temps. Incluez -j ( -scj ) et vous verrez le nombre d'interruptions/CPU. Utilisez les majuscules -J et vous verrez les TYPES de chaque interruption/CPU.

Bien sûr, si vous aimez vraiment vmstat, vous pouvez toujours lire les données collectl avec --vmstat et il montrera les données historiques au format vmstat.

Il y a beaucoup plus d'interrupteurs que je n'ai le temps d'énumérer, mais vous pouvez le consulter à l'adresse suivante SourceForge ou simplement le googler.

2voto

Terpion Points 91

D'après l'utilisation de 400 %, je suppose que vous avez un processeur à quatre cœurs. Votre charge moyenne est presque le double de la capacité et la moitié des processus sont en attente de CPU.

D'abord, renice votre Shell à 0 ou -10 pour obtenir un système plus réactif, puis utilisez htop pour trouver le(s) processus incriminé(s) et le(s) suivre avec strace sur un processus donné. D'autres outils qui pourraient être utiles sont :

  • vmsat
  • sar
  • iostat
  • pmap

1voto

Bruce ONeel Points 246

Une souris lente peut également être due à une charge d'interruption trop élevée, ou à des contrôleurs USB très occupés (je suppose qu'il s'agit d'une souris USB).

1voto

Vmstat pourrait vous aider en termes généraux. Voici un exemple d'utilisation :

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0 977908 426184 1543884    0    0    38    45  106  385  4  1 95  1

Vous pouvez également l'exécuter toutes les X secondes - il suffit d'ajouter le chiffre X après la commande.

Edit : En vue du commentaire... Ecrivez ce qui suit dans un fichier et rendez ce fichier exécutable. Il vous indiquera les 3 principaux processus sur la machine.

top -n 1 | tail -16 | head -4 | awk '{print $13}'

Si vous voulez savoir ce qui monopolise la mémoire plutôt que le CPU, lisez la page de manuel du haut et changez l'ordre d'affichage.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X