Ich habe einen Standard-Linux-Laptop (Debian-Test) mit einer Swap-Partition.
Ich mache viele Experimente damit. Einige von ihnen sind wirklich speicherhungrig und die Art und Weise, wie sich Linux standardmäßig verhält, ist ein Problem für mich ... Lassen Sie uns ein dummes Beispiel geben:
- Setzen Sie sich vor den Laptop
- Öffnen Sie ein Terminal
- Geben Sie
python
dann eina = [0]*100000000
Jetzt stehen die Chancen gut, dass Sie nicht genug RAM haben, um diese große Liste zu bearbeiten. Linux füllt den RAM, dann den Swap und ein paar Minuten später wird der OOM-Killer ausgelöst und (fast) zufällige Dienste beendet, und hoffentlich, wenn Sie zum richtigen Zeitpunkt Strg + C drücken python
, und wenn das Terminal Hatte noch Fokus, wird der Computer wieder reagieren.
Ich möchte einige Speicherbeschränkungen durchsetzen, um dieses unerwünschte Austauschen zu vermeiden und einem Prozess das Recht zu verweigern, mehr Speicher zuzuweisen als ich (im RAM). Wenn der Speicherbedarf unter einem bestimmten Grenzwert liegt oder von root angefordert wird, beenden Sie einfach den speicherhungrigsten Prozess eines Benutzers mit Ausnahme von root.
ulimit -Sv [mem]
Ich höre hinten!
Ho Ho! "Verwenden Sie cgroups
via cgexec
!" sagt jemand in der ersten Reihe!
Ja, Sie haben Recht: Dies sind in der Tat sehr gute Lösungen. Aber:
- Sie gelten nicht systemweit
- Die Grenzen werden pro Prozess festgelegt
- Die Grenzwerte sind statisch, unabhängig von der tatsächlichen Menge an freiem RAM (AFAIK).
- Hier und da sagen sie, dass dies keine wirklich gute Lösung ist, um harte Grenzen durchzusetzen.
Was ich möchte ist, dass der Kernel sagt: "Du gehörst zum Benutzer foo (nicht root), du verwendest viel Speicher und wir werden keinen Speicher mehr haben. Tut mir leid, Alter ... stirb jetzt!"
Oder: "Was zum Teufel machst du? Du brauchst x MB und es sind nur y MB verfügbar. Ja, SWAP ist leer, aber du hast nicht vor, SWAP für deine Drecksarbeit zu verwenden, oder? Nein, ich sagte nein! Keine Erinnerung für dich! Wenn du darauf bestehst, wirst du sterben! "
overcommit_memory
spezielle Datei verwendet RAM + SWAP als verwendbaren Speicher. Ich werde immer noch tauschen :)
ulimits
sind eine schlechte Idee, wie fast überall gezeigt, da es sich um eine pro-Prozess-Einschränkung handelt ... Ich weiß, Sie wissen :) Über cgroups
, das ist definitiv besser, aber es fehlt etwas allgemeineres: Ich spreche über meinen Laptop, aber ich auch Besitzen Sie einen "Berechnungs" -Server, den wir drei gemeinsam nutzen können. Wenn ich solche Limits pro Benutzer erzwinge, werde ich durch das Worst-Case-Szenario eingeschränkt, nicht wahr?
/proc/sys/vm/overcommit_memory
wirkt sich auf das Kernelverhalten bei geringem Arbeitsspeicher aus.