Gibt es ein Tool, mit dem die Speichernutzung protokolliert werden kann?

18

Ich möchte die Speichernutzung eines Prozesses überwachen und diese Daten protokollieren. Gibt es ein solches Tool?

Tshepang
quelle
1
Ich denke, dieser Link zum programmgesteuerten Überwachen einer Prozessspeicherauslastung ist hilfreich, um Ihren Bedarf zu decken.
Sen

Antworten:

8

Ich habe ein Skript geschrieben, um genau dies zu tun . Grundsätzlich werden Stichproben psin 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).

Jeet
quelle
1
Syrupy ist offenbar
Framester umgezogen
12

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.

Sridhar Iyer
quelle
Ich denke , es ist in seiner Einfachheit elegant. Möglicherweise möchten Sie grep --line-buffered <process> >>somefilegrep zwingen, jede Zeile ohne Pufferung auszugeben
Ott Toomet
7

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, ...

Christian
quelle
1
aber kann sarman sich auf nur einen prozess konzentrieren? meistens scheint es, das System als Ganzes zu überwachen
Xenoterracide
3
Der pidstatBefehl aus dem sysstat-Paket bietet auch eine ziemlich schöne Oberfläche für das Melden von Statistiken zu einzelnen Prozessen.
Steven D
@xenoterracide Steven D hatte die Antwort. Ich war mir dieses Befehls vorher nicht bewusst.
Christian
4

Abgesehen von dem oben erwähnten Sar würde ich atop empfehlen . Es speichert ein binäres Protokoll, das Sie anschließend lesen können, und neben dem Speicher werden viele andere Informationen gespeichert.

rsuarez
quelle
3

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 .

andcoz
quelle
Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Saji89
Dieses Dokument Massiv im Detail erklären.
Shawn Xie
0

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}]
Robert Fleming
quelle