Antworten:
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.
echo 1 > /proc/sys/vm/oom_dump_tasks
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
Ermöglicht die Erstellung eines systemweiten Task-Dumps (ohne Kernel-Threads), wenn der Kernel ein OOM-Killing ausführt und Informationen wie pid, uid, tgid, VM-Größe, rss, nr_ptes, swapents, oom_score_adj score und name enthält. Dies ist hilfreich, um festzustellen, warum der OOM-Killer aufgerufen wurde, um die Schurkenaufgabe zu identifizieren, die ihn verursacht hat, und um festzustellen, warum der OOM-Killer die Aufgabe ausgewählt hat, die er zum Töten ausgeführt hat.
Wenn dies auf Null gesetzt ist, werden diese Informationen unterdrückt. Auf sehr großen Systemen mit Tausenden von Aufgaben ist es möglicherweise nicht möglich, die Speicherstatusinformationen für jede einzelne zu sichern. Solche Systeme sollten nicht gezwungen werden, unter OOM-Bedingungen eine Leistungsminderung zu erleiden, wenn die Informationen möglicherweise nicht erwünscht sind.
Wenn dies auf einen Wert ungleich Null gesetzt ist, werden diese Informationen immer dann angezeigt, wenn der OOM-Killer tatsächlich eine Memory-Hogging-Aufgabe beendet.