Lorsque j'exécute la commande suivante pour obtenir l'utilisation du processeur, j'obtiens une utilisation agréable du processeur + utilisateur.
top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}'
Production:
14.5
Ici, je reçois un problème, c'est que la sortie dépend de la commande supérieure, elle ne change donc pas instantanément en tant que commande supérieure. Donc, je ne reçois pas instantanément le bon processeur. Il donne la même sortie et ne change pas.
Je veux obtenir un cpuusage en temps réel en sortie. Veuillez m'aider à améliorer ma commande.
command-line
cpu
Ketan Patel
la source
la source
time
. Sur mon système, cela ne prend que 0,165 s.time (top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}' )
Réponses:
Vous avez raison,
top
semble donner une utilisation incorrecte du processeur lors de la première itération. Vous pouvez contourner ce problème comme ceci:Bien sûr, cela prendra deux fois plus de temps, mais cela fonctionnera quand même.
Si vous voulez toujours que cela fonctionne plus rapidement, vous pouvez utiliser l'
-d
option, par exemple pour une période totale de mesure de 1 seconde, utilisez la moitié:la source
Techniquement, le premier
top
ne produit pas toujours la même valeur; il affiche simplement la charge CPU moyenne depuis le dernier démarrage. Étant donné quetop
le delta de/proc/stat
statistiques est utilisé pour calculer la charge du processeur, la première valeur est calculée lors de la comparaison avec zéro, ce qui donne un résultat incorrect (mais WAD).Si vous ne voulez pas utiliser
top
, vous pouvez directement analyser/proc/stat
:C'est aussi plus rapide et plus précis de cette façon.
Vous pouvez le tester avec
stress
:Et fait
après.
la source
watch
pouvez l'exécuter:watch -n1 "bash ./cpu"
/proc/stat
est assez cool mais il semble avoir le même inconvénient que la première itération de top: il génère la charge CPU moyenne depuis le dernier démarrage, pas celle actuelle.Juste pour développer la réponse de @ Ruslan,
top
divise l'utilisation du processeur entre l'utilisateur, les processus système et lesnice
processus, nous voulons la somme des trois. Ainsi, nous pouvons exécutertop
enb
mode atch qui nous permet d'analyser sa sortie. Cependant, comme expliqué ici , la 1ère itération detop -b
retourne les pourcentages depuis le démarrage, nous avons donc besoin d'au moins deux itérations (-n 2
) pour obtenir le pourcentage actuel. Pour accélérer les choses, vous pouvez définir led
délai entre les itérations sur0.01
:la source
Peut-être utiliser celui-ci en fonction de la
ps
sortie:la source
Utilisez la commande watch ou for loop in shell,
c'est à dire
watch -n1 "top -b -n1 | grep 'Cpu(s)' | awk '{print \$2 + \$4}'"
la source
Pourquoi vous souciez-vous de l'utilisation du processeur? La moyenne de charge est un bien meilleur indicateur:
Si vous avez vraiment besoin de l'utilisation du processeur, l'analyse
/proc/stat
est probablement la voie à suivre.la source
/proc/stat
ne donne pas l'utilisation du processeur tel qu'il est, il faut le lire deux fois avec un certain temps entre les lectures et faire des calculs pour obtenir l'utilisation du processeur. C'est exactement ce quitop
fait.Utilisation de la
sar
commandeCela signifie: obtenir 10 fois le résultat à chaque seconde
la source