web-dev-qa-db-de.com

CPU-Nutzung und Speicherauslastung eines einzelnen Prozesses unter Linux abrufen?

Ich möchte die CPU- und Speicherauslastung eines einzelnen Prozesses unter Linux erhalten - ich kenne die PID. Hoffentlich kann ich es jede Sekunde bekommen und mit dem Befehl 'watch' in ein CSV schreiben. Welchen Befehl kann ich verwenden, um diese Informationen von der Linux-Befehlszeile abzurufen?

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

(Sie können "cmd" weglassen, dies kann jedoch beim Debuggen hilfreich sein).

Beachten Sie, dass dies die durchschnittliche CPU-Auslastung des Prozesses während der Laufzeit angibt.

189
caf

Eine Variante der Antwort von caf : top -p <pid>

Dadurch wird die CPU-Nutzung automatisch aktualisiert, sodass sie gut überwacht werden kann.

56
Manki

Sie können die Ergebnisse anhand des Namens des Prozesses erhalten 

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

mit der Option -C können Sie den Prozessnamen verwenden, ohne dessen PID zu kennen.

31
amit

Verwenden Sie pidstat (von sysstat - siehe Link ).

z.B. Zur Überwachung dieser beiden Prozess-IDs (12345 und 11223) alle 5 Sekunden verwenden

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

Programm starten und überwachen

Dieses Formular ist nützlich, wenn Sie eine ausführbare Datei leicht vergleichen möchten:

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

Wenn Sie nun Strg + C drücken, wird das Programm beendet und die Überwachung beendet. Beispielausgabe:

CPU  MEM
20.0  1.3
35.0  1.3
40.0  1.3

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

Getestet auf Ubuntu 16.04.

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

oder pro Prozess

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

Wie in cafs answer kommentiert, geben ps und in einigen Fällen pidstat den Lebensdauerdurchschnitt der pCPU an. Wenn Sie top einmal ausführen müssen, können Sie Folgendes ausführen:

top -b -n 1 -p <PID>

oder nur für Daten und Header verarbeiten:

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

ohne Überschriften:

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

Sie können top -b und grep die gewünschte PID verwenden (mit dem Flag -b läuft im Batch-Modus) oder auch das Flag -p und die PID ohne Verwendung von grep angeben.

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

dabei ist die erste Spalte die PID, CPU-Auslastung der zweiten Spalte, Speicherauslastung der dritten Spalte.

2
Osama Al-Banna

Dies ist ein netter Trick, um einem oder mehreren Programmen in Echtzeit zu folgen und gleichzeitig die Ausgabe eines anderen Tools zu beobachten: watch "top -bn1 -p$(pidof foo),$(pidof bar); tool"

1
Tom Wocken

Um die Speichernutzung nur für Ihre Anwendung zu erhalten (im Gegensatz zu den von ihr verwendeten gemeinsam genutzten Bibliotheken müssen Sie die Linux-Schnittstelle smaps verwenden). Diese Antwort erklärt es gut .

1
Paul Biggar

Alle Antworten hier zeigen nur den Speicherprozentsatz für die PID. 

Hier ein Beispiel, wie Sie die rss-Speichernutzung in KB für alle Apache-Prozesse erhalten. Ersetzen Sie "grep Apache" durch "grep PID", wenn Sie nur eine bestimmte PID beobachten möchten:

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

Dies druckt:

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

Mit CPU%:

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

Ausgabe:

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 - Prozess-ID

etime - Prozess läuft/Live-Dauer

% cpu - CPU-Auslastung

% mem - Speichernutzung

cmd - Befehl

Ersetzen Sie Prozessname durch den Prozess, den Sie verfolgen möchten, mysql nginx php-fpm usw.

1
Siva KR

Für diejenigen, die sich eine Weile lang gefragt haben, warum die gewählte Antwort nicht funktioniert:

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

Kein Leerzeichen ibetween %cpu, und %mem.

0
ZhaoGang

Oben, liste die wichtigsten CPU- und Speicherverbrauchsprozesse auf

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

(Wenn Sie sich in MacOS 10.10 befinden, probieren Sie die kumulative -c-Option von top aus:

top -c a -pid PID

(Diese Option ist in anderen Linux-Versionen nicht verfügbar, mit Scientific Linux el6 und RHEL6 versucht.)

0
Kieleth

ps Befehl (sollte nicht verwendet werden): 

top Befehl (sollte verwenden): 

Verwenden Sie top, um die CPU-Auslastung in Echtzeit abzurufen (aktuelles kurzes Intervall):

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

wird wie folgt lauten: 78.6

0
vikyd