Ich möchte die Speichernutzung eines Prozesses überwachen und diese Daten protokollieren. Gibt es ein solches Tool?
Ich möchte die Speichernutzung eines Prozesses überwachen und diese Daten protokollieren. Gibt es ein solches Tool?
Antworten:
Ich habe ein Skript geschrieben, um genau dies zu tun . Grundsätzlich werden Stichproben ps
in bestimmten Intervallen erstellt, um ein Profil eines bestimmten Prozesses zu erstellen. Der Prozess kann vom Überwachungstool selbst gestartet werden oder es kann sich um einen unabhängigen Prozess handeln (der durch pid oder ein Befehlsmuster angegeben wird).
Gelegentlich, wenn es nötig ist, mache ich einfach:
$ top -d 1 -b |grep <process> >>somefile
Es ist keine elegante Lösung, aber erledigt den Job, wenn Sie den schnellen Rohwert wollen, um Ihre Hypothese zu verifizieren.
grep --line-buffered <process> >>somefile
grep zwingen, jede Zeile ohne Pufferung auszugeben
sar
( System Activity Reporter ) aus dem sysstat- Paket ist in solchen Fällen Ihr Freund.
Ein anderer Weg wäre die Überwachung in Kombination mit historischen Daten, zB Munin, pnp4nagios, rrdtools, ...
sar
man sich auf nur einen prozess konzentrieren? meistens scheint es, das System als Ganzes zu überwachen
pidstat
Befehl aus dem sysstat-Paket bietet auch eine ziemlich schöne Oberfläche für das Melden von Statistiken zu einzelnen Prozessen.
Du könntest es mit Valgrind versuchen .
Valgrind ist ein Instrumentierungsframework zum Erstellen dynamischer Analysewerkzeuge. Es gibt Valgrind-Tools, die viele Speicherverwaltungs- und Threading-Fehler automatisch erkennen und Ihre Programme detailliert profilieren können. Sie können Valgrind auch verwenden, um neue Werkzeuge zu erstellen.
Die Valgrind-Distribution enthält derzeit sechs Tools in Produktionsqualität: einen Speicherfehlerdetektor , zwei Thread-Fehlerdetektoren, einen Cache- und Verzweigungsvorhersage-Profiler, einen Cache- und Verzweigungsvorhersage-Profiler zur Erzeugung von Aufrufgraphen und einen Heap-Profiler .
Ich mag Sridhars einfache Antwort, aber ich habe meine eigene gewürfelt, bevor ich seine ausprobiert habe:
import json, psutil, datetime, time
with open('log.txt', 'w') as f:
while True:
json.dump((datetime.datetime.now().isoformat(),
psutil.Process(7274).memory_info()._asdict()), f)
f.write('\n')
f.flush()
time.sleep(1)
Dies ist grundsätzlich nur dann sinnvoll, wenn Sie eine strukturierte Ausgabe wünschen. Ändern Sie 7274 entsprechend. Auch in Python 3.5 ist etwas kaputt gegangen. _asdict()
Verwenden Sie daher Python 2.
Die Ausgabedatei sieht folgendermaßen aus:
["2019-03-19T11:21:53.784670", {"rss": 220389376, "vms": 538984448, "shared": 15724544, "text": 303104, "lib": 0, "data": 221364224, "dirty": 0}]
["2019-03-19T11:21:54.786136", {"rss": 220438528, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]
["2019-03-19T11:21:55.787555", {"rss": 220495872, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]
["2019-03-19T11:21:56.788754", {"rss": 220528640, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]