Quelles sont les méthodes disponibles pour obtenir l'utilisation du processeur dans la ligne de commande Linux? [fermé]

12

Nous savons que topc'est une commande pour obtenir l'utilisation du processeur sous Linux et d'autres manières cat /proc/statqui sont utilisées par top.

Quelles sont les autres méthodes pour obtenir l'utilisation du processeur dans la ligne de commande Linux?

Scénario d'utilisation: la sortie de cette commande sera utilisée par un script pour consigner l'utilisation du processeur en continu. topet /proc/statdonner une utilisation détaillée qui est difficile à enregistrer. Existe-t-il un moyen plus simple d'obtenir les informations sur le processeur?

fasil
la source
3
quel est le problème avec ceux que vous citez?
pataluc
@pataluc Il donne des informations plus détaillées. J'ai besoin d'une utilisation globale du processeur, par exemple: CPU utilisé: 91% Mem utilisé: 78% Mem Free: 22% quelque chose comme ça ..
fasil
voir la réponse de Nathan ... vous pouvez sedle résultat si vous ne voulez que la valeur.
pataluc
Voter pour clôturer comme "non constructif". De superuser.com/help/dont-ask : " Pour éviter que votre question soit signalée et éventuellement supprimée, évitez de poser des questions subjectives où ... votre réponse est fournie avec la question, et vous attendez plus de réponses:" J'utilise ______ pour ______ , Qu'est ce que tu utilises?' "
bwDraco
3
@DragonLord en fait, il existe des moyens assez limités de le faire et les deux réponses ici sont en fait utiles. Le mien souligne une idée fausse très courante topet l'autre donne une commande très utile. Ce n'est pas un X que j'utilise, et toi? question, mais comment dois - je faire X question. Voter pour rouvrir.
terdon

Réponses:

14

Comme d'autres l'ont dit, le meilleur moyen est probablement top. Il a besoin d'un petit ajustement et d'un peu d'analyse, mais vous pouvez l'obtenir pour vous donner l'utilisation actuelle du processeur en pourcentage.

topdivise l'utilisation du processeur entre l'utilisateur, les processus système et les niceprocessus, nous voulons la somme des trois. Ainsi, nous pouvons exécuter topen bmode atch qui nous permet d'analyser sa sortie. Cependant, comme expliqué ici , la 1ère itération de top -bretourne 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 le ddélai entre les itérations sur 0.01. Enfin, vous avez grepla ligne contenant les pourcentages CPU puis utilisez gawkpour additionner les processus utilisateur, système et sympa:

    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

Je pensais que vous pouviez également obtenir ces informations ps -o pcpu axen ajoutant le% d'utilisation de chaque processus en cours d'exécution. Malheureusement, comme expliqué ici , ps"renvoie le pourcentage de temps passé à s'exécuter pendant toute la durée de vie d'un processus", ce qui n'est pas ce dont vous avez besoin.


ÉDITER

Sur la base de votre commentaire, votre version de topest différente de la mienne et vous devriez l'utiliser à la place:

top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'

Et, pour éviter les problèmes de localisation, définissez les paramètres régionaux sur C:

LC_ALL=C top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'
terdon
la source
J'ai supprimé ma réponse car ce que vous avez dit est correct. Celui-ci semble être une méthode valable.
Nathan C
@NathanC Je pensais que votre réponse était correcte aussi, c'était ce que j'aurais répondu. Ensuite, je l'ai testé et j'ai été surpris :).
terdon
@terdon Merci pour votre réponse détaillée ... Je n'ai pas pu obtenir la sortie de la commande ci-dessus. Y a-t-il une modification syntaxique requise ..
fasil
@fasil non, ça devrait marcher. Quel est le problème? Des messages d'erreur?
terdon
@terdon Je n'obtiens aucune sortie pour la commande complète. avec #top -bn 2 -d 0,01 j'obtiens le résultat complet mais en ajoutant grep '^% Cpu' je ne vois aucune sortie juste les invites ne retournent pas erreur ...
fasil
9

sarest la façon définitive de le faire. Ainsi, par exemple, sar -uproduira quelque chose comme ceci:

08:30:01 AM       CPU     %user     %nice   %system   %iowait     %idle
08:40:01 AM       all      6.94      0.00      1.77      4.92     86.36
08:50:01 AM       all      5.73      0.00      2.31     12.72     79.24
09:00:01 AM       all      5.95      0.00      2.58     18.36     73.11
09:10:01 AM       all      6.88      0.00      2.22     17.44     73.45
09:20:01 AM       all      8.61      0.00      2.68     27.93     60.78

Vous ne dites pas quel Linux vous utilisez mais pour CentOS / RedHat vous devez installer le sysstatpaquet, et je pense que c'est la même chose sur Debian / Ubuntu.

Vous pouvez également utiliser sar pour collecter des statistiques ad hoc :

sar -o /tmp/sar.out 60 600

Recueillira des statistiques toutes les 60 secondes 600 fois, donc 600 minutes.

Philip Kearns
la source
1
Vous devriez probablement le formuler différemment. La ligne que vous avez publiée mesurera toutes les 60 secondes, 600 fois. La façon dont j'ai lu votre message était que le 600 est une durée, donc si je mets 30 600, cela prendrait toutes les 30 secondes pendant 600 minutes, mais cela prendrait en fait un toutes les 30 secondes 600 fois.
James McDonnell