Lorsque j'exécute la commande suivante pour obtenir l'utilisation du processeur, j'obtiens l'utilisation de Nice + utilisateur.
top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}'
Sortie:
14.5
Le problème est que la sortie dépend de la commande top, elle ne change donc pas instantanément en tant que commande top. Donc, je ne reçois pas le cpu correct instantanément. Il donne la même sortie et ne change pas.
Je veux obtenir l'utilisation du processeur en temps réel en sortie. Aidez-moi s'il vous plaît à améliorer ma commande.
Si vous pouvez vous permettre un délai d'une seconde, cela affichera l'utilisation de la CPU sous forme de pourcentage simple:
echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]
(Sans le délai d'une seconde, vmstat
ne peut imprimer que les valeurs moyennes depuis le démarrage.)
Il s'agit d'un problème connu avec top
name__. Comme expliqué ici , la 1ère itération de top -b
renvoie les pourcentages depuis le démarrage, il nous faut donc au moins deux itérations (-n 2
) pour obtenir le pourcentage actuel. Pour accélérer les choses, vous pouvez définir le d
name__elay entre les itérations sur 0.01
. top
divise l'utilisation du processeur entre l'utilisateur, les processus système et Nice
name__, nous voulons la somme des trois. Enfin, vous grep
la ligne contenant les pourcentages de CPU, puis vous utilisez gawk
pour additionner les processus utilisateur, système et Nice:
top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
----- ------ ----------- --------- ----------------------
| | | | |------> add the values
| | | |--> keep only the 2nd iteration
| | |----------------> keep only the CPU use lines
| |----------------------------> set the delay between runs
|-----------------------------------> run twice in batch mode
J'ai essayé plusieurs manières, mais cela me semble le plus précis:
cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{print ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'
Je l'ai eu de ici
Utilisez -n2
. Cela produira deux lignes. La 1ère fois top
imprime la ligne ne remplit pas les conditions pour l'état à ce moment-là. Puis ajustez votre script pour ignorer la première ligne.