Comment enregistrer l'utilisation du processeur par processus?

18

J'ai une boîte sur Linode qui passe par un comportement étrange. De temps en temps, les E / S du processeur et du disque tournent à 100% et le serveur ne répond plus et doit être démarré. J'aimerais mieux enquêter sur ce qui se passe, mais je ne sais pas comment trouver qui est responsable de tout ce CPU et ces E / S. J'utilise Gentoo 2.6.18.

Helder S Ribeiro
la source

Réponses:

20

Vous pouvez essayer de faire quelque chose comme ceci:

while true; do ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10 >> logfile.txt; printf "\n" >> logfile.txt; sleep 3; done

qui vous montrerait les dix premiers processus en termes d'utilisation du processeur. Vous pouvez modifier le nombre de processus affichés en remplaçant le 10 dans "head -10" par un nombre différent, et la fréquence à laquelle il est mis à jour en changeant le 3 dans "sleep 3" ou en supprimant entièrement la partie "sleep 3".

Shawn
la source
5
Assurez-vous d'avoir une sorte de sommeil là-dedans, sinon il y a de fortes chances que votre processus shell soit toujours dans le top 10. :)
jedberg
Je pense que sort -nrferait mieux de trier numériquement (au moins sur mon ubuntu / debian boxen)
sehe
2
BTW, vous devriez donner à ce processus la plus haute priorité, pour qu'il reste utile pendant les pics de charge élevée (ce qui est le point de sa vie, après tout).
spacediver
12

Vérifiez au-dessus, il écrira un journal binaire de pratiquement tout ce que vous voudriez, puis vous pouvez utiliser un top comme gui pour parcourir les tranches horaires de la journée (la valeur par défaut est de prendre les données toutes les 5 minutes). http://www.atcomputing.nl/Tools/atop/

ScottZ
la source
6

Je pense que munin est l'un des bons outils de surveillance qui vous aidera à obtenir des informations sur les activités de votre box. En outre, il existe des outils en ligne de commande comme sar , iostat, ps, top pour une telle utilisation.

Ali Mezgani
la source
5

Les autres réponses vous ont seulement montré comment vous pouvez regarder ce qui se passe actuellement, ce qui n'aide pas si le système a été redémarré.

Si vous souhaitez que ces informations soient enregistrées pour la postérité (ou la facturation, ou toute autre utilisation que vous pourriez également avoir), ce que vous voulez, c'est la comptabilité des processus.

Voici un HOWTO que j'ai trouvé, mais je vais être honnête - cela fait une décennie que je n'ai pas utilisé la comptabilité des processus.

http://tldp.org/HOWTO/Process-Accounting/

Rob F
la source
2

Une approche plus conviviale de la solution de Shawn pour la surveillance en temps quasi réel:

while true; do clear; ps -eo pcpu,pmem,pid,user,args --sort=-pcpu c|head -20; sleep 1; done

Cela fournira une vue statique des 20 principaux processus qui seront actualisés toutes les 1 s. L'option "c" de la commande ps affichera le nom de l'exécutable du processus plutôt que la commande args entière. Vous pouvez omettre cette option si vous avez plutôt besoin de toutes les informations de commande. La colonne% d'utilisation de la mémoire a également été ajoutée.

manolis
la source
1

Gentoo n'a-t-il pas la commande "top" comme wel?

machine:~/# top

devrait vous donner les statistiques de fonctionnement des programmes qui causent le plus de charge.

Emthigieux
la source
Oui, je sais, mais j'aimerais que cela soit enregistré pour que je puisse voir l'historique plus tard. Lorsque le processeur atteint un pic, la machine ne répond plus, je ne peux donc pas me connecter et courir toppour voir qui est le coupable. Je veux vérifier plus tard et voir quel processus l'a fait.
Helder S Ribeiro