Comment trouver le (s) processus qui accaparent la machine


10

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

Quel est le moyen le plus rapide pour savoir quel (s) processus sont à l'origine de la charge?

Désormais, les outils "top" et similaires ne sont pas la solution, car ils affichent l'utilisation du processeur ou de la mémoire, mais pas les deux en même temps. Ce dont j'ai besoin, c'est de la seule commande que je pourrais être en mesure de taper au fur et à mesure - quelque chose qui comprendra

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

ou

processus X cherche partout sur le disque

ou

le processus X utilise 400% de CPU "

Donc, ce que je recherche, c'est iostat, htop / atop et des outils similaires en un 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 des chiffres que je peux analyser mais d'un outil qui me dit exactement quel processus provoque la charge actuelle. Supposons que l'utilisateur devant le clavier sache à peine écrire "processus", mais l'utilisateur est rapidement dépassé lorsqu'il s'agit de "taille résidente", "mémoire virtuelle" ou "cycle de vie du 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 sont sans rapport avec le problème. Donc, ce que l'outil devrait faire, c'est rechercher des processus qui monopolisent des ressources et répertorier uniquement ceux avec "ce processus a besoin de beaucoup de CPU, cela produit de nombreuses IRQ, ce processus alloue beaucoup de RAM (et il continue de croître)".

Ce sera une liste relativement courte. Il sera beaucoup plus simple pour quelqu'un de nouveau de trouver le coupable dans cette liste que dans la sortie de, disons, htopce qui me donne environ 5000 numéros mais m'oblige à plier moi-même les processus multithread (j'ai 50 lignes qui disent VIRT 2750Mmais seulement 16 Go de RAM - la machine devrait se mettre à mort, mais bien sûr, c'est une mauvaise interprétation des données qui peut arriver rapidement).


Je ne vois pas pourquoi. Les symptômes que vous décrivez ne sont pas ceux d'une corbeille de disque (n'affecteraient pas la souris). La souris lente est un processeur classique à pleine capacité.
soandos

1
C'est juste un exemple. Veuillez le prendre avec un grain de sel. Imaginez un noob assis devant l'ordinateur qui ne sait rien. Comment peut-il savoir le plus facilement ce qui se passe (c'est-à-dire sans passer une demi-heure à googler ce que topsignifie la sortie )
Aaron Digulla

Êtes-vous à la recherche d'un équivalent Linux du gestionnaire de tâches avec une interface graphique et tout, ou autre chose?
soandos

Je cherche quelque chose que je lance et qui dit "Le processus X monopolise la machine".
Aaron Digulla

Réponses:


3

Je dois sourire aux réponses parce que chacun vous a dit d'exécuter 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 vous aider si vous l'exécutez à une fréquence suffisamment élevée, mais je dirais que collectl est encore mieux.

Comme sar , vous l'exécutez en tant que démon en installant le RPM et en le faisant /etc/init.d/collectl start.

Maintenant, lorsque vous voyez quelque chose de lent, collectl -p /var/log/collectl/filename --topva lire les données et vous montrer les meilleurs processus. Vous auriez également pu simplement courir collectl --topet les voir en temps réel. BTW - tout ce que vous pouvez faire en temps réel, vous pouvez également le lire.

En ce qui concerne la charge du processeur, que se passe-t-il si vous êtes surchargé d'interruptions? collectl -sCne montrera pas seulement les charges sur les processeurs individuels (ou à utiliser -scpour une charge moyenne), il montrera comment ils passent leur temps. Incluez -j( -scj) et vous verrez le nombre d'interruptions / CPU. Utilisez des majuscules -Jet 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 --vmstatet il affichera les données historiques au format vmstat.

Il y a beaucoup plus de commutateurs que je n'en ai le temps, mais vous pouvez le vérifier sur SourceForge ou simplement le rechercher sur Google.


Merci; ce n'est pas exactement ce que je cherchais mais au moins c'est un bon point de départ.
Aaron Digulla

Un outil fantastique! Et sur Ubuntu (au moins depuis le 12.04) il vous suffit d'installer le paquet - il démarre automatiquement le démon lors de l'installation et lors des redémarrages par la suite :)
nealmcb

6

"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 car le processeur est entièrement pris, il apparaît sous forme de colonnes "us" et "sy" sur la ligne "Cpu (s):" proche de 100% ensemble.

S'il est lent en raison de l'échange, "Mem:" "free" affiche des valeurs très faibles et "Swap:" "utilisé" des valeurs élevées.

Si c'est lent en raison des E / S en général, alors "CPU (s):" "wa" indique que du temps est consacré à l'attente des 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.


+1 Mais je suis plutôt à la recherche d'un outil qui fait cette analyse pour moi et imprime le processus avec quelques informations sur ce qui ne va pas. Je ne veux pas rassembler cela à partir des chiffres "bruts". N'importe quoi?
Aaron Digulla

1
Je suis désolé, mais vous ne pouvez pas résoudre des problèmes tels que la lenteur de la machine sans comprendre au niveau de base la différence entre les différents types de lenteur. Si de tels outils existent, je ne les connais pas; il est fort probable que vous ayez besoin d'un administrateur informatique / d'un technicien compétent.
Zds

Ce serait bien si un tel outil existe, car il est certainement possible de le déterminer automatiquement: si je peux le dire à partir de la sortie de top, un ordinateur aussi. Ce n'est pas le sourire de Mona Lisa, c'est juste de croquer quelques chiffres pour en trouver de "mauvais".
Aaron Digulla

2

Sur la base de l'utilisation de 400%, je suppose que vous disposez d'un processeur quadricœur. Votre charge moyenne est presque le double de la capacité et la moitié des processus attendent le processeur.

Tout d'abord, renicevotre shell à 0 ou -10 pour obtenir un système plus réactif, puis utilisez htoppour trouver le ou les processus incriminés et suivez-le avec straceun processus donné. D'autres outils qui pourraient être utiles sont:

  • vmsat
  • sar
  • iostat
  • pmap

1

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 que c'est une souris USB).


Des outils qui me disent quel pilote / composant provoque la charge élevée d'IRQ?
Aaron Digulla

1

vmstat pourrait vous aider en termes généraux. Un exemple d'utilisation est:

$ 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 - ajoutez simplement le nombre X après la commande.

Modifier: En vue du commentaire ... Écrivez 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 vouliez savoir quelle mémoire monophasée par opposition au processeur, lisez la page de manuel supérieure et changez l'ordre d'affichage.


Je cherche quelque chose de plus haut niveau. Il devrait exécuter vmstat et analyser les chiffres pour moi, donc je n'ai pas besoin de savoir ce que signifie "cs" et si un gros "cs" est "bon" ou "mauvais".
Aaron Digulla
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.