Gibt es eine Möglichkeit für ein Python-Programm, festzustellen, wie viel Speicher es derzeit verwendet? Ich habe Diskussionen über die Speichernutzung für ein einzelnes Objekt gesehen, aber ich benötige die gesamte Speichernutzung für den Prozess, damit ich feststellen kann, wann es erforderlich ist, zwischengespeicherte Daten zu verwerfen.
python
memory-management
rwallace
quelle
quelle
psutil
ist plattformübergreifend und kann dieselben Werte wie dasps
Befehlszeilentool zurückgeben: pythonhosted.org/psutil/#psutil.Process.memory_infopsutil
) unterstützt derzeit Linux, Windows, OSX, FreeBSD und Sun Solaris, sowohl 32-Bit- als auch 64-Bit-Architekturen, mit Python-Versionen von 2.6 bis 3.4" aus Documentationpsutil
,psutil.Process()
entsprichtpsutil.Process(os.getpid())
. Das ist eine Sache weniger, an die Sie denken müssen, um zu tippen.Für Unix-basierte Systeme (Linux, Mac OS X, Solaris) können Sie die
getrusage()
Funktion aus dem Standardbibliotheksmodul verwendenresource
. Das resultierende Objekt hat das Attributru_maxrss
, das die maximale Speichernutzung für den aufrufenden Prozess angibt:Die Python-Dokumente notieren die Einheiten nicht. Informationen zum
man getrusage.2
Wert des Geräts finden Sie auf der Seite Ihres Systems . Unter Ubuntu 18.04 wird die Einheit als Kilobyte angegeben. Unter Mac OS X sind es Bytes.Die
getrusage()
Funktion kann auch angegeben werdenresource.RUSAGE_CHILDREN
, um die Verwendung für untergeordnete Prozesse und (auf einigen Systemen)resource.RUSAGE_BOTH
für die vollständige (selbst und untergeordnete) Prozessnutzung abzurufen.Wenn Sie sich nur für Linux interessieren, können Sie alternativ die Datei
/proc/self/status
oder lesen,/proc/self/statm
wie in anderen Antworten auf diese und diese Frage beschrieben .quelle
Unter Windows können Sie WMI ( Homepage , Cheeseshop ) verwenden:
Unter Linux (aus dem Python-Kochbuch http://code.activestate.com/recipes/286222/ :
quelle
return int(result[0].WorkingSet)
Unter Unix können Sie das
ps
Tool verwenden, um es zu überwachen:Dabei ist 1347 eine Prozess-ID. Das Ergebnis ist auch in MB.
quelle
Aktuelle Speichernutzung des aktuellen Prozesses unter Linux für Python 2, Python 3 und Pypy ohne Importe:
Getestet unter Linux 4.4 und 4.9, aber auch eine frühe Linux-Version sollte funktionieren.
Beim Suchen
man proc
und Suchen nach Informationen in der/proc/$PID/status
Datei werden Mindestversionen für einige Felder erwähnt (z. B. Linux 2.6.10 für "VmPTE"), aber das Feld "VmRSS" (das ich hier verwende) wird nicht erwähnt. Daher gehe ich davon aus, dass es seit einer frühen Version vorhanden ist.quelle
Ich mag es , danke für @bayer. Ich bekomme jetzt ein spezielles Tool zur Prozesszählung.
Fügen Sie meine Prozessliste hinzu.
Referenz
quelle
ps aux | awk '/python/{sum+=$6}; END {print sum/1024 " MB"}'
Für Python 3.6 und psutil 5.4.5 ist es einfacher,
memory_percent()
die hier aufgeführten Funktionen zu verwenden .quelle
Noch einfacher zu bedienen als
/proc/self/status
:/proc/self/statm
. Es ist nur eine durch Leerzeichen getrennte Liste mehrerer Statistiken . Ich konnte nicht feststellen, ob beide Dateien immer vorhanden sind.Hier ist ein einfaches Beispiel:
Das ergibt eine Liste, die ungefähr so aussieht:
Sie können sehen, dass es nach ungefähr 3 Zuweisungen von 100.000 Bytes um ungefähr 300.000 Bytes springt.
quelle
Unten ist mein Funktionsdekorator, mit dem Sie verfolgen können, wie viel Speicher dieser Prozess vor dem Funktionsaufruf verbraucht hat, wie viel Speicher er nach dem Funktionsaufruf verwendet und wie lange die Funktion ausgeführt wird.
Also, wenn Sie eine Funktion damit dekoriert haben
Sie können diese Ausgabe sehen:
quelle
quelle
Für Unix-Systeme
time
gibt Ihnen der Befehl (/ usr / bin / time) diese Informationen, wenn Sie -v übergeben. SieheMaximum resident set size
unten, dies ist der maximale ( maximale ) reale (nicht virtuelle) Speicher, der während der Programmausführung verwendet wurde :quelle
time
anstelle von zu verwenden/usr/bin/time
. Siehe: askubuntu.com/questions/434289/…Verwenden Sie sh und os, um in die Antwort von Python Bayer zu gelangen.
Die Antwort ist in Megabyte.
quelle