2017-02-03 1 views
0

Ich versuche, den Speicherverbrauch eines Prozesses für eine lange Zeit mit Valgrind-Massiv zu überwachen. Der Prozess ist aktiv und führt einige Routineoperationen in bestimmten Zeitintervallen durch, und ich möchte den Speicherverbrauch des gesamten Prozesses sehen.Überwachen des Speicherverbrauchs über mehr als 1 Stunde

ich starten Sie den Prozess mit:

valgrind --tool=massif --trace-children=yes <program name> <arguments> 

Mein Programm einen Daemon erstellt.

Ich sehe Massiv erstellen eine Datei für den Hauptprozess, der fast sofort beendet, während der andere noch am Leben ist. Wenn ich den Daemon-Prozess kill, gibt massif eine andere Datei mit der PID des Daemon aus. Allerdings merke ich, dass ich diese zweite Datei nur dann bekomme, wenn ich den Prozess nicht länger als 15 Minuten laufen lasse. Wenn ich es mehr laufen lasse, wird keine Datei generiert. Valgrind zeigt keine Fehler.

Ich vermute, dass Valgrind nicht in der Lage ist, eine so große Menge an Informationen zu verarbeiten, ist das korrekt? Irgendwelche Vorschläge, wie ich mein Ziel auf andere Weise erreichen könnte?

ich die neueste Version von valgrind leite: 3.12.0

Antwort

1

Wenn valgrind ein Problem (wie ein Ausgang der Speicherbedingung) trifft, es sollte eine Fehlermeldung erzeugen. Ein möglicher Grund, keine Fehlermeldung zu erhalten, wenn Valgrind stirbt, ist, dass valgrind -9 beendet oder vom OOM getötet wurde.

Was Sie tun können, um dies zu überprüfen ist vgdb in einer Schleife in einem anderen Fenster zu verwenden, wie etwas zu tun:

while true 
    do 
    vgdb .... valgrind monitor command ... 
    sleep 60 
    done 

Als Monitor-Befehl können Sie entweder einen Befehl verwenden, um den internen Zustand zu erhalten den valgrind Speichers:

 vgdb v.info stats 

oder alternativ, wenn sie unter Massiv ausgeführt wird, können Sie einen Speicher Snapshot alle 60 Sekunden oder so durch die Verwendung

produzieren
 vgdb detailed_snapshot filenameXXX 

(Sie müssen die Dateinamen für jeden Snapshot ändern)

Siehe http://www.valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.gdbserver für weitere Informationen über vgdb und Befehle zu überwachen.

+0

Vielen Dank, das Problem war, dass ich ein init.d-Skript zusammen mit "Service" verwendet, um den Prozess zu stoppen, und dass Skript kill -9-Befehl manchmal gesendet wurde. Das Töten des Prozesses mit SIGTERM alleine löst das Problem! – Perennialista

Verwandte Themen