Deaktivieren Sie das Auslagern von Readonly-Seiten usw. unter Linux?

351
BCS

Gibt es eine Möglichkeit, Linux daran zu hindern, irgendetwas auszutauschen, sondern direkt zum OOM-Killer zu gehen, wenn ihm der physische Arbeitsspeicher ausgeht?

Hintergrund

Ich habe eine Linux-Workstation, an der gelegentlich nicht genügend RAM vorhanden ist. Wenn dies geschieht, wird es nicht wiederhergestellt. (Dies gilt unabhängig davon, ob Swap aktiviert ist oder nicht. Ich habe gesehen, dass dies auf beide Arten geschieht.)

In diesem Fall möchte ich, dass der OOM-Killer Prozesse abbricht und so lange weitergeht, bis sich das System erholt oder abstürzt (entweder oder irgendetwas dazwischen ist einem unbestimmten Hang vorzuziehen). Interessanterweise geschieht dies auch bei deaktiviertem Swap nicht, vielmehr gibt das System Hinweise darauf, dass es ausgetauscht wird (Sachen funktionieren, nur um Größenordnungen langsamer).

Meine derzeitige Theorie besagt, dass Linux immer noch Daten austauscht, von denen es denkt, dass sie von der Festplatte gesichert werden, z. B. nur lesbare Seiten von ausführbaren Dateien und mmap-Dateien.

Hinweis: Ich habe bereits einige Anstrengungen unternommen und mehrere Techniken zur Begrenzung der Speichernutzung ausgeschöpft. Ich kann nicht viel mehr tun, ohne den normalen Betrieb zu behindern. Ich bin wirklich auf der Suche nach einer Lösung, "die alle töten und den Benutzer das Problem lösen lassen".

0

1 Antwort auf die Frage

0
jim mcnamara

Ich weiß nicht, ob dies auf allen Linux-Distributionen funktioniert.

Machen Sie es weniger wahrscheinlich, dass ein Prozess abgetötet wird. nnn = pid

echo -15 > /proc/nnn/oom_adj 

Wir können den OOM-Killer dazu bringen, den nnn-Prozess mit höherer Wahrscheinlichkeit zu beenden, indem Sie Folgendes tun.

echo 10 > /proc/nnn/oom_adj 

Jedoch.

Das hört sich für mich nicht nach einer großartigen Lösung an. Ich würde etwas unternehmen, um Ressourcen auf Prozesse zu beschränken, lange bevor ich darüber nachdachte. ulimit ist aus genau diesem grund da. Dies macht Ihren aktuellen Ansatz nicht ungültig, wenn Sie dies bereits getan haben. Aber es beantwortet die Frage, denke ich. Dafür müssten Sie:

Überwachen Sie die Dinge und ergreifen Sie Maßnahmen, um das Töten zu ermöglichen

Nehmen Sie diesen Kill-Ansatz a priori, wenn Sie wissen, dass Sie ohne etwas leben können. Was wirft die Frage auf: Warum läuft dieser Prozess, wenn Sie ohne ihn leben können?

In Bezug auf ulimit: 1) Ich führe am Ende ein paar Dutzend Prozesse aus, die jeweils ~ 1% des Arbeitsspeichers verwenden, aber gelegentlich ~ 10% verwenden müssen, nur nicht alle zur Zeit. 2) ein signifikanter Bruchteil der Zeit, in der der Auslöseprozess "etwas Zufälliges" ist, und es gibt zu viele von ihnen, um gültige Grenzen zu finden. BCS vor 9 Jahren 0
Ich mache das für meinen Lebensunterhalt - ich finde Ihre Herangehensweise irgendwie unorthodox. Wenn Sie (zum Beispiel) Physikmodelle für Ihre eigene Forschung verwenden - Dieser Ansatz ist cool. Wenn dies eine Art Produktionsbox ist, nicht cool. In Produktionssystemen müssen Sie die Ursache / den Prozess finden und beheben, auch wenn dies etwas umkodieren / umwandeln bedeutet. Ich habe die Prozesse in ihrer eigenen virtuellen Maschine isoliert, um sie isoliert zu beobachten. jim mcnamara vor 9 Jahren 0
In meinem Fall, wenn es auf meiner Workstation ist, ist es per Definition nicht produktiv. BCS vor 9 Jahren 0