Comment savoir si un processus est lié au processeur, à la mémoire ou au disque?

42

Comment savoir si un processus est lié au processeur, à la mémoire ou au disque?

ssanj
la source
Si vous utilisez une interface graphique gnome, vous pouvez ajouter l'applet Moniteur système à votre panneau. Dans les paramètres, vous pouvez définir les cycles perdus sur IO-Wait pour qu'ils apparaissent en blanc, et définir les graphiques Mémoire, CPU et Lecture / Écriture sur disque pour qu'ils s'affichent. Je modifie généralement les couleurs de graphe par défaut pour faciliter la distinction entre mémoire utilisateur / système d'exploitation et lecture / écriture sur disque. Ce n'est pas une vraie solution, mais c'est pratique d'avoir à côté de tous les outils mentionnés dans les réponses.
Jeremy
1
@ Luis-Alvarado Je ne suis pas d'accord avec le fait que cette question n'est pas utile, bien que je dirais que cela pourrait s'intégrer mieux à StackOverflow ou similaire. Je suis venu ici à la recherche d'une solution.
Skeggse
Le problème avec la question telle que posée est qu'elle ne prend pas en compte l'environnement d'exécution. La méthode la plus efficace pour découvrir le goulet d'étranglement d'un composant hôte d'un travail / processus est intimement liée au runtime, à l'environnement d'exécution, au système d'exploitation hôte, au matériel, etc. du travail et aux outils disponibles pour chaque composant à inspecter. Certains environnements d'exécution (le moteur d'exécution Erlang ou la machine virtuelle Java d'IBM, par exemple) ont des outils plus approfondis qui couvrent tout l'environnement, d'autres sont totalement dépourvus d'outils et vous laissent faire des suppositions éclairées basées sur n'importe quel htop / iotop / etc. peut vous montrer.
Zxq9
Connexe: stackoverflow.com/questions/3156334/…
Ciro Santilli a rejoint le forum

Réponses:

19

Cela nécessite du vaudou. Ça dépend. Exemple:

  • S'il y a assez de mémoire et que les disques ne semblent pas trop occupés, cela peut être lié au processeur. Regardez l'utilisation du processeur et si sa limite à 100% est liée au processeur. Si ce n'est pas le cas, il existe un goulot d'étranglement artificiel dans la mise en œuvre. Par exemple, sur un processeur double cœur, un processus à un seul thread ne dépassera pas 50% de l'utilisation du processeur.

  • Si le processeur et la mémoire sont disponibles, mais que les disques sont très occupés ou que la latence des entrées / sorties semble élevée, il est probable que ses entrées / sorties soient liées. Voir si l'ajout de disques supplémentaires (RAID?) Peut aider.

  • Aucune de ces réponses? Vérifiez la mémoire disponible.

  • Assez de mémoire? Il peut y avoir un goulot d'étranglement artificiel dans le processus lui-même, c'est-à-dire que quelqu'un a oublié de supprimer un sommeil (1)? Naah ce n'est pas si facile d'habitude. ;)

Il y a une raison pour laquelle nous avons tout un laboratoire pour les ingénieurs de performance dans la plupart des entreprises traitant de produits sensibles à la performance!

Utilisez des outils tels que sar, vmstat, iostat, oprofile, lockstat, dtrace, des outils de contrôle de performances spécifiques à un produit, etc., pour résoudre les problèmes de performances.

Sudhanshu
la source
2
Existe-t-il un outil qui lie tout cela ensemble?
Ssanj
d’habitude non, mais si dtrace est disponible sur votre système (Solaris / FreeBSD / Mac OS X?), vous pouvez aller bien plus loin en l’utilisant.
Sudhanshu
Je viens de me rappeler qu'il y a Systemtap sur Linux (semblable à dtrace), sauf que je ne suis pas sûr de la maturité de l'outil.
Sudhanshu
vmstat est utile.
James
12

check out iotop, peut être utile

Ithkuil
la source
iotop n'a pas été installé par défaut dans redhat
Mona Jalal
9

Un outil qui peut être utile pour vérifier en temps réel un certain nombre de statistiques de processus (mémoire, utilisation du processeur, E / S, etc.) est htop . Il ne remplace pas les outils plus spécialisés nommés par Sudhanshu, mais pourrait être un bon début.

JanC
la source
4

Outre les autres outils mentionnés, exécutez ps l PIDen insérant l'identifiant de processus correspondant ou consultez les colonnes STATE et WCHAN en haut ou en haut.

S'il est à l'état D (pour le disque), le fichier IO est en cours. Cela peut être dû au fait qu’il lit beaucoup de fichiers ou qu’il utilise beaucoup de mémoire et d’échange. La colonne WCHAN vous indiquera la fonction du noyau à l'intérieur. googler pour eux ou demander ici peut vous donner une idée de ce qu’ils veulent dire.

S'il est à l'état R (exécution), il utilise le processeur dans l'espace utilisateur, c'est-à-dire qu'il est lié au processeur à ce moment-là.

S'il est en mode S (veille), il fait partie d'un appel système interruptible, ce qui peut signifier qu'il est soit en train de dormir, soit en train d'attendre le trafic réseau ou un verrou. Encore une fois, regarder le wchan spécifique vous en dira plus.

Voir aussi Qu'est-ce que le "canal en attente" d'un processus?

poolie
la source
2

Exécuter topet regarder la ligne d'utilisation du processeur. Un utilisateur élevé% indique qu'il est lié au cpu. Une attente élevée% indique qu'il est lié à l'IO.

psusi
la source