Gibt es eine Möglichkeit, einen Core-Dump zu erhalten oder einen Prozess zu debuggen, der von Oom-Killer getötet wurde?
Oder sogar Oom-Killer einstellen, um zu versuchen, einen Prozess stattdessen mit ABRT zu beenden?
Ein anderer Ansatz besteht darin, die Überbelegung des Speichers zu deaktivieren.
So stellen Sie Ihrer Speicherverwaltung einen Anschein von Vernunft wieder her:
- Deaktivieren Sie den OOM Killer (
vm.oom-kill = 0
in /etc/sysctl.conf einfügen)- Deaktivieren Speicher overcommit (Put
vm.overcommit_memory = 2
in/etc/sysctl.conf
)Durch diese Einstellungen verhält sich Linux wie gewohnt (wenn ein Prozess mehr Speicher anfordert als verfügbar ist,
Beachten Sie, dass dies ein ternärer Wert ist:malloc()
schlägt dies fehl und der Prozess, der den Speicher anfordert, wird diesen Fehler voraussichtlich bewältigen).
- 0 = "Schätzung, ob wir genug RAM haben"
- 1 = "Sag immer ja"
- 2 = "Sag nein, wenn wir nicht das Gedächtnis haben"
Dadurch wird die Anwendung gezwungen, den Speichermangel selbst zu verarbeiten, und möglicherweise können die Protokolle / Coredump / usw. Ihnen etwas Nützliches geben.
HINWEIS: Wenn Ihr System nicht mehr über genügend Speicher verfügt, können Sie keine neuen Prozesse erzeugen! Möglicherweise sind Sie vom System ausgeschlossen.
Dies scheint ungefähr das Maximum zu sein, mit dem der Kernel bei Fehlern aufgrund von Speichermangel angezeigt werden kann.
https://www.kernel.org/doc/Documentation/sysctl/vm.txt
quelle