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?
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.
Une variante de caf's answer : top -p <pid>
Cette actualisation automatique de l'utilisation du processeur est donc utile pour la surveillance.
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.
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
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
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
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.
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.
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"
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 .
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
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 ...
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
.
Ci-dessus la liste des processus les plus gourmands en cpu et en mémoire
ps axo %cpu,%mem,command | sort -nr | head
(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)
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
-b
: mode batch-n 2
: Nombre d'itérations, utilisez 2
car: Lorsque vous l'exécutez pour la première fois, il n'a pas d'échantillon précédent auquel comparer, ces valeurs initiales sont donc les pourcentages depuis le démarrage.-d 0.2
: temps de retard (en seconde, voici 200 ms)-p 6962
: PID du moniteurtail -1
: la dernière ligneawk '{print $9}'
: la 9ème colonne (le numéro d'utilisation du processeur)