Afficher les cinq principaux processus consommateurs de ressources processeur avec `ps`

102

Comment afficher les cinq principaux processus consommateurs de ressources processeur avec ps?

PlanasB
la source

Réponses:

95

Pourquoi utiliser psquand vous pouvez le faire facilement avec la topcommande?

Si vous devez utiliser ps, essayez ceci:

ps aux | sort -nrk 3,3 | head -n 5

Si vous voulez quelque chose qui est vraiment 'top'esq avec des mises à jour constantes, utilisez watch

watch "ps aux | sort -nrk 3,3 | head -n 5"
Boban P.
la source
3
ps aux | trier -k 3,3 | tail -n 5 ;-)
PlanasB
1
il sera bon d'inclure le tri numérique, pour ignorer l'en-tête de ps aux. ps aux | sort -nrk 3,3 | head -n 5
Syss
1
cela engendre de nombreux processus qui consomment plus de ressources et sont également plus sujets à la
concurrence
Ceci est vrai @ LưuVĩnhPhúc mais je me demande en quoi cela diffère de la manière dont il topfonctionne réellement.
icedwater
1
@icedwater toplit la liste des processus et affiche seul le résultat, sans passer par aucun autre processus
phuclv
87

La bonne réponse est :

ps --sort=-pcpu | head -n 6

Ainsi, vous pouvez spécifier des colonnes sans interférer avec le tri.

Ex:

ps -Ao user,uid,comm,pid,pcpu,tty --sort=-pcpu | head -n 6

Remarque pour MAC OS X : sous Mac OS X, psne reconnaît pas --sort, mais propose -rde trier en fonction de l'utilisation actuelle du processeur. Ainsi, pour Mac OS X, vous pouvez utiliser:

ps -Ao user,uid,comm,pid,pcpu,tty -r | head -n 6
Facundo Victor
la source
3
C’EST la bonne réponse. Merci Facundo. J'essayais d'expliquer aux autres que vous pouvez utiliser le tri et l'acheminement, mais ps est également intégré à une option de tri et maintenant je vois que vous l'utilisez également, ce qui est génial.
Luis Alvarado
La 2ème commande semble plus utile ... mais la première semble juste montrer bash(x2, ou headaussi bien) ps...
Wilf
3
@Wilf La première montre comment trier par consommation de processeur sans utiliser la commande sort, la seconde montre comment spécifier des colonnes sans interférer avec le tri. Quand on explique quelque chose, il vaut toujours mieux être concis et expliquer une chose à la fois.
Facundo Victor
28

En fonction de vos besoins, vous trouverez ceci un peu plus lisible:

ps -eo pcpu,pid,user,args --no-headers| sort -t. -nk1,2 -k4,4 -r |head -n 5

exemple de sortie:

 1.3     4 root     [ksoftirqd/0]
 1.1     9 root     [ksoftirqd/1]
 1.0 17606 nobody   /usr/sbin/gmetad
 1.0    13 root     [ksoftirqd/2]
 0.3 17401 nobody   /usr/sbin/gmond

(les champs sont% CPU, PID, USER, COMMAND)

Ryan Horrisberger
la source
22

Je ne pense pas que psc'est ce que vous recherchez. Avez-vous regardé la sortie de top?

Si vous avez GNU-Top, essayez d’utiliser son mode batch pour créer une liste de processus triée par utilisation du processeur et utilisez tête / queue pour obtenir les 5 premières lignes (les 8 premières sont des en-têtes):

top -b -n 1 | head -n 12  | tail -n 5

Le dessus de BSD semble se comporter différemment et ne dispose pas d'un mode non interactif, utilisez donc l'une des pssolutions proposées.

Caleb
la source
1
Dans OS X, c'est top -o cpu -n 5un moyen de réaliser la même chose. Est-ce que quelqu'un sait? Mon topest différent de votre top.
boehj
Vous êtes celui avec le sommet différent de sorte que vous seriez en mesure de dire. Mon sommet n'a pas -oet -ndéfinit le nombre de fois où il rafraîchit l'affichage avant de quitter.
Caleb
C'est suffisant. Je vais monter sur une machine Linux cet après-midi et jeter un coup d'oeil. Mon topne semble pas avoir un mode batch, ce qui est assez limitant. Il doit y avoir un moyen d'intégrer d' topautres commandes. Je vais faire des recherches.
boehj
J'ai mentionné le commutateur de mode de traitement par lots dans ma réponse, mais il est en fait inutile pour mon top, car il détecte automatiquement qu'il fait partie d'un canal plutôt que d'une session interactive. Avez-vous essayé de le piquer sans cela?
Caleb
1
Ça ira. GNU a topfonctionné comme décrit cet après-midi. À votre santé.
boehj
6

La plus rapide des doublures que j'ai trouvées pour cela (note 6 car l'en-tête est la somme):

ps aux k-pcpu | head -6
Nestor Urquiza
la source
5

Notez que les versions actuelles de ps possèdent une capacité de tri en fonction des codes de champ (indiqués dans la page de manuel ps). Le code de champ pour l'utilisation du processeur est "c". Vous pouvez utiliser --sort cà la fin d'une commande ps, par exempleps aux --sort c

Cela mettra le processus utilisant le plus de processeurs au bas de la liste. Inversez l'ordre de la liste en ajoutant un moins au code de champ utilisé pour trier, par exempleps aux --sort -c

Cian D
la source
4

Afin d'ajouter un point à d'autres réponses intéressantes, je préfère:

ps auxk-c | head -6

Il affiche également l'en-tête, ce qui est agréable.

Ici kest identique à --sortet cspécifie le %cpuchamp d' utilisation du processeur (alias ) pour le tri, alors que -c'est pour le tri inversé.

Vous pouvez ajouter plusieurs spécificateurs séparés par d' ,autres spécificateurs possibles sont: %mem, args, bsdstart, pid, gid, uid... que vous pouvez trouver la liste complète dans STANDARD FORMAT PRESCRIPTEURS section de page de manuel. Par exemple:

 ps auxk -gid,-%mem | head -11

imprimerait 10 processus avec l’identifiant de groupe le plus élevé, triés en interne par utilisation de la mémoire.

2i3r
la source
3

L'outil de ligne de commande psa sa propre option de tri, je préfère donc:

$ ps -eo pcpu,args --sort=-%cpu | head

Vous pouvez ajouter les colonnes que vous voulez. Voir quelles autres options sont disponibles via la pspage de manuel.

$ man ps
Christopher James Morton
la source
0

topsur Mac OS X a une option de mode de journalisation sous la forme de top -l numberOfSamples(qui semble être l'équivalent du mode de traitement par lots de GNU top). Il est toutefois nécessaire d’avoir au moins deux échantillons car "le premier échantillon affiché aura un pourcentage de CPU non valide pour chaque processus, car il est calculé à l’aide du delta entre échantillons" ( man 1 top).

# examples
top -o cpu -l 2 -n 5 | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu -U $(logname) | tail -n 6
ulf
la source
0

topaffichera ce qui utilise votre CPU. Si vous l'avez installé, htopvous permet un contrôle plus fin, y compris le filtrage par - dans votre cas - le processeur.

PSN
la source
0

Je crois que le moyen le plus simple de voir le processus consommant le plus de 5 cpu est,

ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 5

Pour voir le top 5 processus consommateur de mémoire est,

ps -eo pid,comm,%cpu,%mem --sort=-%mem | head -n 5

Où,

-e : Cet indicateur est utilisé pour sélectionner tous les processus

-o : Cet indicateur est utilisé pour formater en tant que défini par l'utilisateur.

pid : Cet argument utilisé pour montrer le pid

comm: Cet argument est utilisé uniquement pour afficher le nom de la commande. Pour obtenir une utilisation complète de la commande args, cmdoucommand

%cpu: Cet argument indique le pourcentage d'utilisation du processeur par le processeur au format "##. #". Ici pcpupeut également être utilisé.

%mem: Cet argument indique le rapport entre la taille de l'ensemble résident du processus et la mémoire physique de la machine, exprimé en pourcentage. Ici pmempeut également être utilisé.

--sort: Spécifiez l'ordre de tri. Une fois que =le -signe est utilisé pour trier la valeur la plus élevée en haut, l’option par défaut consistant +à répertorier un ordre numérique croissant [c.-à-d. De 0 à n].

Muhammad
la source
-2

top -bn1 |sed -n '7,12'pfonctionne comme un joli petit paquebot aussi.
Bien que je préfère utiliser ps avec --sort = X -o X, Y, Z

en utilisant ps, vous pouvez extraire différentes statistiques grep pour un processus OU un utilisateur, puis les totaliser OU les avg avec un tuyau à effacer.

Jshedler
la source