Ich möchte die Speicher- / CPU-Auslastung eines Prozesses in Echtzeit überwachen. Ähnlich, top
aber nur auf einen Prozess ausgerichtet, vorzugsweise mit einem Verlaufsdiagramm.
shell
process
monitoring
top
Josh K
quelle
quelle
Antworten:
top
Unterstützt unter Linux die Fokussierung auf einen einzelnen Prozess, obwohl es natürlich kein Verlaufsdiagramm gibt:Dies ist auch unter Mac OS X mit einer anderen Syntax verfügbar:
quelle
top -p `pgrep -f /usr/bin/kvm`
.hostname
_pid.txt ausführen. exit'andhtop
ist ein großartiger Ersatz fürtop
. Es hat ... Farben! Einfache Tastaturkürzel! Scrollen Sie mit den Pfeiltasten durch die Liste! Beenden Sie einen Prozess, ohne die PID zu verlassen und ohne sie zu beachten! Markiere mehrere Prozesse und töte sie alle!Unter allen Funktionen wird in der Manpage angegeben, dass Sie drücken können F, um einem Vorgang zu folgen .
Wirklich, du solltest es versuchen
htop
. Ich habe nietop
wieder angefangen , nachdem ich es zum ersten Mal benutzt habehtop
.Zeigen Sie einen einzelnen Prozess an:
htop -p PID
quelle
top
hat auch farben. Drücken Siez
.top
hat farben! Schade, dass seine Farben ziemlich nutzlos sind, besonders im Vergleich zuhtop
(was die Prozesse anderer Benutzer verblasst und den Programm-Basisnamen hervorhebt).htop -p PID
wird genauso funktionieren wie das Beispiel von @Michael Mrozek.psrecord
Im Folgenden wird eine Art Verlaufsdiagramm behandelt . Python-
psrecord
Paket macht genau das.Für einen einzelnen Prozess ist es der folgende (vorübergehende Ctrl+C):
Für mehrere Prozesse ist das folgende Skript hilfreich, um die Diagramme zu synchronisieren:
Diagramme sehen aus wie:
Speicher_Profiler
Das Paket bietet nur RSS-Sampling (plus einige Python-spezifische Optionen). Es kann auch Prozesse mit seinen untergeordneten Prozessen aufzeichnen (siehe
mprof --help
).Standardmäßig wird ein Tkinter-basierter (
python-tk
möglicherweise erforderlicher) Diagrammexplorer angezeigt, der exportiert werden kann:Graphit-Stapel & Statistik
Es mag für einen einfachen einmaligen Test als übertrieben erscheinen, aber für so etwas wie ein mehrtägiges Debugging ist es mit Sicherheit vernünftig. Ein praktisches All-in-One-
raintank/graphite-stack
Gerät (von Grafanas Autoren) für Bildpsutil
undstatsd
Kunde.procmon.py
bietet eine Implementierung.Dann in einem anderen Terminal nach dem Start des Zielprozesses:
Öffnen Sie dann Grafana unter http: // localhost: 8080 , Authentifizierung als
admin:admin
und richten Sie die Datenquelle https: // localhost ein . Sie können ein Diagramm wie das folgende zeichnen:Graphit-Stapel & Telegraf
Anstelle von Python-Skripten kann das Senden der Metriken an Statsd
telegraf
(und dasprocstat
Eingabe-Plugin) verwendet werden, um die Metriken direkt an Graphite zu senden.Minimale
telegraf
Konfiguration sieht so aus:Dann Zeile ausführen
telegraf --config minconf.conf
. Der Grafana-Teil ist mit Ausnahme der Metriknamen identisch.sysdig
sysdig
(in Debian- und Ubuntu-Repos verfügbar) mit der sysdig-inspect- Benutzeroberfläche sehen sehr vielversprechend aus und bieten extrem feine Details zusammen mit der CPU-Auslastung und RSS, aber leider kann die Benutzeroberfläche sie nicht rendern und Ereignisse nicht nach Prozessensysdig
filternprocinfo
Zeitpunkt des Schreibens. Dies sollte jedoch mit einem benutzerdefinierten Meißel (einesysdig
in Lua geschriebene Erweiterung) möglich sein.quelle
pgrep --help
zur Rettung. Zumindest gibt es--newest
und--oldest
.Ctrl+C
Wenn der psrecord-Prozess gerade beendet wird, ohne dass ein Plot gespeichert wird, müssen Sie den zu testenden Prozess beenden.So verwenden Sie diese Informationen in einem Skript:
calcPercCpu.sh
benutze wie:
calcPercCpu.sh 1234
wobei 1234 die pid istFür die angegebene $ nPid wird der Durchschnitt von 10 Snapshots der CPU-Auslastung in einer gesamten Sekunde gemessen (Verzögerung von jeweils 0,1s * nTimes = 10). das liefert ein gutes und schnelles genaues Ergebnis dessen, was gerade passiert.
Passen Sie die Variablen an Ihre Bedürfnisse an.
quelle
$nPercCpu
) abzurufen : Shell, Top, Grep, Sed, Cut ... BC. Viele, wenn nicht alle, können Sie beispielsweise in 1 Sed- oder Awk-Skripten zusammenführen.top
‚s Ausgang ist ein Mittelwert über$delay
. Vgl. Berechnung der CPU-AuslastungIch benutze normalerweise folgende zwei:
HP-Messschieber : Sehr gutes Tool zur Überwachung von Prozessen. Sie können auch Anrufdiagramme und andere Informationen auf niedriger Ebene überprüfen. Bitte beachten Sie jedoch, dass es nur für den persönlichen Gebrauch kostenlos ist.
daemontools : Eine Sammlung von Tools zum Verwalten von UNIX-Diensten
quelle
Mit
top
und kannawk
man leicht ein durch Kommas getrenntes Protokoll von% CPU ($9
) +% MEM ($10
) erstellen, das später in jedes Statistik- und Grafiktool eingespeist werden kann.Die Ausgabe wird wie folgt sein
Dies führt jedoch nicht zu guten Ergebnissen bei großen
$delay
Datenmengen, da der gedruckte Zeitstempel$delay
aufgrund der Funktionsweisetop
der Ausgabe tatsächlich zurückliegt . Ohne zu sehr ins Detail zu gehen, besteht eine einfache Möglichkeit darin, die Zeit zu protokollieren, die bereitgestellt wird durchtop
:Dann ist der Zeitstempel genau, aber die Ausgabe wird immer noch um verzögert
$delay
.quelle
Wenn Sie den Prozessnamen kennen, können Sie diesen verwenden
quelle
Wenn Sie eine eingeschränkte Linux-Distribution haben, für die die Option "top" nicht pro Prozess (-p) oder verwandte Optionen enthält, können Sie die Ausgabe des Befehls "top" nach Ihrem Prozessnamen analysieren, um die CPU-Nutzungsinformationen pro Prozess abzurufen.
8 stellt die CPU-Auslastung pro Prozess in der Ausgabe des Befehls top in meiner eingebetteten Linux-Distribution dar
quelle
Nicht genug Reputation, um Kommentare abzugeben, aber für psrecord können Sie es auch direkt in Python programmatisch aufrufen:
quelle
Wenn Sie die Durchschnittswerte für einen bestimmten Zeitraum eines Prozesses benötigen, versuchen Sie es mit der akkumulativen Option -c von top:
"-c a" wurde in top für Mac 10.8.5 gefunden.
Für Scientific Linux ist die Option -S, die interaktiv festgelegt werden kann.
quelle
top
dieses Feature tatsächlich bereitgestellt wird. Meine Version auf Fedora 19 funktioniert nicht. Gleiches gilt auch für Ubuntu 13.04.Ich bin ein bisschen spät dran, aber ich werde meinen Befehlszeilentrick nur mit der Standardeinstellung teilen
ps
Ich benutze dies als Einzeiler. Hier löst die erste Zeile den Befehl aus und speichert die PID in der Variablen. Dann gibt ps die verstrichene Zeit, die PID die prozentuale CPU-Auslastung, den prozentualen Speicher und den RSS-Speicher aus. Sie können auch andere Felder hinzufügen.
Sobald der Prozess endet, gibt der
ps
Befehl nicht "Erfolg" zurück und diewhile
Schleife wird beendet.Sie können die erste Zeile ignorieren, wenn die zu profilierende PID bereits ausgeführt wird. Geben Sie einfach die gewünschte ID in die Variable ein.
Sie erhalten eine Ausgabe wie diese:
quelle