web-dev-qa-db-fra.com

Comment obtenir une utilisation globale du processeur (par exemple 57%) sous Linux

Je me demande comment vous pouvez obtenir l'utilisation du processeur système et la présenter en pourcentage à l'aide de bash, par exemple.

Exemple de sortie:

57%

Dans le cas où il y aurait plus d'un cœur, ce serait bien si un pourcentage moyen pouvait être calculé.

171
user1199739

Regardez cat /proc/stat

grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage "%"}'

EDIT s'il vous plaît lire les commentaires avant de copier-coller ceci ou de l'utiliser pour un travail sérieux. Cela n'a pas été testé ni utilisé, c'est une idée pour les personnes qui ne souhaitent pas installer un utilitaire ou pour quelque chose qui fonctionne dans n'importe quelle distribution. Certaines personnes pensent que vous pouvez "apt-get install" n'importe quoi.

NOTE: Ce n'est pas l'utilisation actuelle du processeur, mais l'utilisation globale du processeur dans tous les cœurs depuis le démarrage du système. Cela pourrait être très différent de l'utilisation actuelle du processeur. Pour obtenir la valeur actuelle, il faut utiliser top (ou un outil similaire).

152
vimdude

Tu peux essayer:

top -bn1 | grep "Cpu(s)" | \
           sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
           awk '{print 100 - $1"%"}'
95
netcoder

Essayez mpstat à partir du paquet sysstat

> Sudo apt-get install sysstat
Linux 3.0.0-13-generic (ws025)  02/10/2012  _x86_64_    (2 CPU)  

03:33:26 PM  CPU    %usr   %Nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
03:33:26 PM  all    2.39    0.04    0.19    0.34    0.00    0.01    0.00    0.00   97.03

Ensuite, un certain cutou greppour analyser les informations dont vous avez besoin:

mpstat | grep -A 5 "%idle" | tail -n 1 | awk -F " " '{print 100 -  $ 12}'a
37
Peter Svensson

Je pourrais aussi donner une réponse concrète avec ma solution, inspirée de celle de Peter Liljenberg:

$ mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12"%" }'
0.75%

Ceci utilisera awk pour imprimer 100 moins le 12ème champ (inactif), suivi du signe de pourcentage. awk ne le fera que pour une ligne où le 12ème champ contient uniquement des chiffres et des points ($12 ~ /[0-9]+/).

20
Dan Fego

EDITED: J'ai remarqué que dans la réponse d'un autre utilisateur,% inactif était le champ 12 au lieu du champ 11. L'awk a été mis à jour pour prendre en compte le champ% inactif en tant que variable.

Cela devrait vous permettre d'obtenir le résultat souhaité:

mpstat | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { print 100 - $field }'

Si vous voulez un arrondi entier simple, vous pouvez utiliser printf:

mpstat | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { printf("%d%%",100 - $field) }'
13
jordanm