web-dev-qa-db-fra.com

Récupérer l'utilisation du processeur et de la mémoire d'un processus unique sous Linux?

Je souhaite obtenir l'utilisation du processeur et de la mémoire d'un processus unique sous Linux - je connais le PID. J'espère pouvoir l'obtenir à chaque seconde et l'écrire sur un fichier CSV à l'aide de la commande 'regarder' Quelle commande puis-je utiliser pour obtenir ces informations à partir de la ligne de commande Linux?

142
Supertux
ps -p <pid> -o %cpu,%mem,cmd

(Vous pouvez laisser "cmd" mais cela pourrait être utile pour le débogage).

Notez que cela donne l'utilisation moyenne de la CPU du processus au cours de sa durée d'exécution.

189
caf

Une variante de caf's answer : top -p <pid>

Cette actualisation automatique de l'utilisation du processeur est donc utile pour la surveillance.

56
Manki

Vous pouvez obtenir les résultats par le nom du processus en utilisant 

ps -C chrome -o %cpu,%mem,cmd

l'option -C vous permet d'utiliser le nom du processus sans savoir qu'il s'agit d'un pid.

31
amit

Utilisez pidstat (de sysstat - Report Link ).

par exemple. pour surveiller ces deux ID de processus (12345 et 11223) toutes les 5 secondes, utilisez

$ pidstat -h -r -u -v -p 12345,11223 5
19
Neon

Lancer un programme et le surveiller

Ce formulaire est utile si vous souhaitez analyser facilement un exécutable:

topp() (
  $* &>/dev/null &
  pid="$!"
  trap ':' INT
  echo 'CPU  MEM'
  while sleep 1; do ps --no-headers -o '%cpu,%mem' -p "$pid"; done
  kill "$pid"
)
topp ./myprog arg1 arg2

Maintenant, lorsque vous appuyez sur Ctrl + C, le programme est arrêté et la surveillance est arrêtée. Exemple de sortie:

CPU  MEM
20.0  1.3
35.0  1.3
40.0  1.3

Connexes: https://unix.stackexchange.com/questions/554/how-to-monitor-cpu-memory-usage-of-a-single-process

Testé sur Ubuntu 16.04.

ps aux | awk '{print $4"\t"$11}' | sort | uniq -c | awk '{print $2" "$1" "$3}' | sort -nr

ou par processus

ps aux | awk '{print $4"\t"$11}' | sort | uniq -c | awk '{print $2" "$1" "$3}' | sort -nr |grep mysql
4
Patel95

Comme indiqué dans la réponse de caf ci-dessus, ps et, dans certains cas, pidstat vous donnera la moyenne de durée de vie du pCPU . Si vous avez besoin de courir en haut une fois, vous pouvez lancer:

top -b -n 1 -p <PID>

ou pour traiter uniquement les données et l'en-tête:

top -b -n 1 -p <PID> | tail -3 | head -2

sans en-têtes:

top -b -n 1 -p <PID> | tail -2 | head -1
4
aviranh

Vous pouvez utiliser top -b et grep pour le pid souhaité (avec l'indicateur -b exécuté en mode de traitement par lots) ou également utiliser l'indicateur -p et spécifier le pid sans utiliser grep.

4
Alberto Zaccagni
ps aux|awk  '{print $2,$3,$4}'|grep PID

où la première colonne est le PID, la deuxième colonne l'utilisation du processeur, la troisième colonne l'utilisation de la mémoire.

2
Osama Al-Banna

C'est une bonne astuce pour suivre un ou plusieurs programmes en temps réel tout en regardant la sortie d'un autre outil: watch "top -bn1 -p$(pidof foo),$(pidof bar); tool"

1
Tom Wocken

Pour obtenir l'utilisation de la mémoire de votre application uniquement (par opposition aux bibliothèques partagées qu'elle utilise, vous devez utiliser l'interface Linux smaps). Cette réponse explique bien .

1
Paul Biggar

Toutes les réponses ici ne montrent que le pourcentage de mémoire pour le PID. 

Voici un exemple sur la façon d'obtenir l'utilisation de la mémoire RSS en Ko pour tous les processus Apache. Remplacez "grep Apache" par "grep PID" si vous souhaitez simplement surveiller un PID spécifique:

watch -n5 "ps aux -y | grep Apache | awk '{print \$2,\$6}'"

Cela imprime:

Every 5.0s: ps aux -y | grep Apache | awk '{print $2,$6}'                                                                                                                                                                                                          
Thu Jan 25 15:44:13 2018

12588 9328
12589 8700
12590 9392
12591 9340
12592 8700
12811 15200
15453 9340
15693 3800
15694 2352
15695 1352
15697 948
22896 9360

Avec CPU%:

watch -n5 "ps aux -y | grep Apache | awk '{print \$2,\$3,\$6}'"

Sortie:

Every 5.0s: ps aux -y | grep Apache | awk '{print $2,$3,$6}'                                                                                                                                                                                                       
Thu Jan 25 15:46:00 2018

12588 0.0 9328
12589 0.0 8700
12590 0.0 9392
12591 0.0 9340
12592 0.0 8700
12811 0.0 15200
15453 0.0 9340
15778 0.0 3800
15779 0.0 2352
15780 0.0 1348
15782 0.0 948
22896 0.0 9360
1
Banana
ps axo pid,etime,%cpu,%mem,cmd | grep 'processname' | grep -v grep

PID - ID de processus

etime - Processus en cours d'exécution/durée réelle

% cpu - utilisation du processeur

% mem - Utilisation de la mémoire

cmd - Commande

Remplacez nom_processus par le processus que vous souhaitez suivre, mysql nginx php-fpm etc ...

1
Siva KR

Pour ceux qui ont eu du mal à se demander pendant un moment pourquoi la réponse choisie ne fonctionne pas:

ps -p <pid> -o %cpu,%mem

Aucun espace entre %cpu, et %mem.

0
ZhaoGang

Ci-dessus la liste des processus les plus gourmands en cpu et en mémoire

        ps axo %cpu,%mem,command | sort -nr | head
0
user8854776

(Si vous utilisez MacOS 10.10, essayez l’option accumulative -c de top:

top -c a -pid PID

(Cette option n'est pas disponible sous d'autres Linux, essayée avec Scientific Linux el6 et RHEL6)

0
Kieleth

ps commande (ne doit pas utiliser): 

top commande (devrait utiliser): 

Utilisez top pour obtenir l'utilisation de la CPU en temps réel (intervalle court actuel):

top -b -n 2 -d 0.2 -p 6962 | tail -1 | awk '{print $9}'

va echo comme: 78.6

0
vikyd