Wenn ich ein Python-Programm mit einem Speicherverlust ausführe, würde ich normalerweise erwarten, dass das Programm irgendwann stirbt MemoryError
. Stattdessen wird der gesamte virtuelle Speicher verwendet, bis auf meiner Festplatte nicht mehr genügend Speicherplatz vorhanden ist. Ich verwende Mac OS X 10.8 auf einem Retina-MacBook Pro. Mein Computer hat in der Regel zwischen 10 GB und 20 GB frei. Mac OS X ist intelligent genug, um nicht vollständig zu sterben, wenn auf der Festplatte nicht genügend Speicherplatz vorhanden ist (vielmehr wird ein Dialogfeld angezeigt, in dem ich das Beenden meiner GUI-Programme erzwingen kann).
Gibt es eine Möglichkeit, Python zum Sterben zu bringen, wenn der reale Speicher oder eine angemessene Menge virtuellen Speichers knapp wird? Soweit ich das beurteilen kann, passiert dies unter Linux. Ich denke, Mac OS X ist großzügiger als Linux mit virtuellem Speicher (die Tatsache, dass ich eine SSD habe, könnte ein Teil davon sein; ich weiß nicht, wie intelligent OS X mit diesem Zeug ist). Vielleicht gibt es eine Möglichkeit, den Mac OS X-Kernel anzuweisen, niemals so viel virtuellen Speicher zu verwenden, dass weniger als beispielsweise 5 GB auf der Festplatte frei sind?
quelle
Antworten:
Python Level
Laut diesem Beitrag ist resource.setrlimit () vielleicht das, was Sie brauchen.
Beispiel
System Level
Für Linux wird es tatsächlich mehrmals zuvor auf verschiedenen "Boards" von Stackexchange und anderen Sites beantwortet. Die beste Antwort, die ich gefunden habe, ist hier , die ein Beispiel enthält.
Die Antwort lautet ulimit -v <kByte> . Beispiel: Begrenzen der VM auf 10 MB:
Unter OS X gibt es jedoch Hinweise ( hier und hier ), dass ulimit möglicherweise ignoriert wird. Diese Links sind sehr alt. Ich bin nicht sicher, ob sich die Situation in neueren OS X-Versionen ändert.
Es gibt diesen Beitrag für OS X zur Verwendung von launchd conf. Es wird empfohlen, einen Stapelabschnitt in einer Plist-Konfiguration zu verwenden
Oder mit /etc/launchd.conf
launchd.conf
PS: Laut Mountain Lion man wird launchd.conf (5) pro Benutzer launchd.conf nicht unterstützt
quelle
ulimit
in der Tat scheint nicht zu funktionieren.