peak memory-Messung von lang Laufenden Prozess in linux
Wie kann ich überwachen Sie die maximale Speicher verbraucht ein Prozess in Linux?
Dies ist nicht ein Programm, ich kann intern ändern, um zu Messen, peak memory usage.
Ich nicht wirklich wollen, detaillierte Messungen, noch will ich Sie langsam nach unten mein Programm übermäßig.. so valgrind oder irgendetwas Schwergewicht ist nicht das, was ich Suche...
Und wie die anderen Beiträge weiter oben [Maximale Speichernutzung eines linux/unix-Prozess, Zeit -v scheint nicht zu berichten-Speicher für meinen Computer...
Kann ich nur ausführen, top oder ps, und extrahieren Sie die Speicher verbraucht-Saiten
meine Prozess-id mit einem einfachen Skript. Aber mein Prozess läuft für etwa 20-30 Minuten, so dass ich in der Lage sein möchten melden und bekommen die max.
Ich kann tolerieren, grobkörnigen Proben... jeder 1 minute oder so... wie genau muss ich tun->
1. Gabel mit diesem einfachen mem-Messen-Skript in der zsh?
2. töten Sie es, wenn die Prozess-unter-test beendet?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur mithilfe von top -n zu Durchlaufen, eine bestimmte Anzahl von Zeiten, und -d die Verzögerung zwischen den Aktualisierungen. Sie können auch schnappen Sie sich nur die Ausgabe der entsprechenden Prozess durch grepping der pid, wie:
Lesen Sie die top-Handbuchseite für weitere Informationen
Natürlich können Sie auch greifen die Spalte, die Sie brauchen mit awk.
Eigentlich, was ich vorhin gesagt habe:
"""
versuchen
dass sollte helfen. wenn Sie nur "mal", bash ausführen wird, der eingebaute (das nicht haben "-v")
"""
funktioniert nicht (Rückgabe 0).
Machte ich das folgende perl-Skript (die ich rief die smaps):
Dann nenne ich es (zum Beispiel, zu beobachten, qgit, dass die Speicherauslastung):
Verwenden Sie einfache Anführungszeichen, so dass die "Tochter" shell interpretiert
$$
(welche die gleiche PID qgit nach derexec
). diese Antwort, die ich getestet habe 😀HTH
Valgrind mit Massiv sollte nicht zu schwer sein, aber ich würde empfehlen die Verwendung von /proc. Sie können einfach schreiben Sie Ihre eigenen monitor-Skript. Hier ist meins, für Ihre Bequemlichkeit:
Könnten Sie einen munin-node-plugin, um dies zu tun, aber es ist ein wenig Schwergewicht. http://munin.projects.linpro.no/
/proc/pid/die smaps, wie /proc/pid/maps, gibt nur Informationen über den virtuellen Speicher-mappings, die nicht die tatsächliche, physikalische Speichernutzung. top und ps geben, die RSS-Feeds, die (je nachdem, was Sie wissen wollen) ist nicht unbedingt ein guter Indikator für die Speichernutzung.
Eine gute Wette, wenn Sie auf einem Linux-kernel, die später als 2.6.28.7, ist die Verwendung der Pagemap-Funktion. Es gibt die Diskussion dieser und die Quelle für einige Werkzeuge an http://www.eqware.net/Articles/CapturingProcessMemoryUsageUnderLinux.
Seite-sammeln-Werkzeug ist gedacht, um zu erfassen Speichernutzung ALLER Prozesse, und so wohl auch erlegt eine höhere CPU-Belastung, als Sie wollen. Sie sollten leicht in der Lage, es zu ändern, jedoch so, dass es erfasst, nur Daten für einen bestimmten Prozess-ID. Das würde den Aufwand zu verringern, genug, so dass Sie könnte leicht führen Sie es alle paar Sekunden. Ich habe es nicht ausprobiert, aber ich denke, die Seite-Analyse-tool ausgeführt werden soll, ohne Veränderung.
EQvan
Diese hängt davon ab, welche Art von Speicher, den Sie überwachen möchten.
Überwachung der folgenden M. ein.p.d durch die Sortierung die Anzahl der Verfahren ist eins (nicht alle thread ' s) lassen Sie überwachen die malloc physischen Speicher pro Prozess verwendet.
Schreiben Sie ein c-Programm zu machen, noch schneller, aber ich dachte, awk wurde die minimale Wahl für diesen Zweck.
Ich würde es vorziehen, um die zahlen wie folgt zu den tatsächlichen zahlen in den am wenigsten overhead.
Sie müssen diese Summe, um zu teilen, was ps zeigt, wie RSS-Feeds und bekommen genauere zahlen nicht zu verwirren.
M. ein.p.d:
M. ein.p.c:
M. n.p.d:... und so weiter
Anstatt polling /proc eine Milliarde mal in der Sekunde, warum nicht einfach ein Prozess der Ausgabe von strace?
http://tstarling.com/blog/2010/06/measuring-memory-usage-with-strace/
Genaue Speicher-Metriken gegeben werden kann, die von pagemap kernel interface - eingesetzt in libpagemap Bibliothek https://fedorahosted.org/libpagemap/. Die Bibliothek bietet auch userspace-utils so können Sie beginnen, monitor, Speicher sofort.
Bessere alternative zur Messung der peak/high-water-RSS memory usage wird die
cgmemtime
tool finden Sie hier:https://github.com/gsauthof/cgmemtime
Es ist so einfach zu bedienen wie /usr/bin/time und ohne die Drosselung von Valgrind ist Massiv.
Außerdem basiert es auf einer kernel feature namens cgroups, so ist es sogar genauer als andere polling-Methoden.