Ich denke, es ist kein so ungewöhnliches Problem: Ein Prozess weist enorme Mengen an Speicher zu (sei es aufgrund eines Speicherverlust-Fehlers, weil Sie versuchen, eine unglaublich große Eingabedatei zu verarbeiten, oder was auch immer). Der RAM füllt sich und irgendwann muss Linux auf Swap umstellen. Nun, manchmal ist dies nur der letzte Ausweg: Wenn ich eine teure Berechnung habe, möchte ich keine Daten verlieren, wenn mir gegen Ende der Arbeitsspeicher ausgeht.
Eher jedoch (meiner Erfahrung nach) ist der Speicherverbrauch jedoch unbegrenzt, und zwar durch einen betrügerischen, möglicherweise fehlerhaften Prozess. Das heißt, ich habe nicht nur weniger dringend benötigte Daten, die zum Auslagern verschoben werden, sondern das Betriebssystem ist gezwungen, viele Daten in Panik auszutauschen. Und das unterbricht leider nicht nur den störenden Prozess erheblich, sondern kann das gesamte System fast zum Stillstand bringen (auf Computern mit SSD ist es nicht mehr ganz so schlimm, aber OTOH macht mir Sorgen, ob das Schreiben von Gigabyte und Gigabyte Mülldaten möglich ist die Langzeitschäden der Blitzzellen).
Bis ich das Problem bemerke und den Prozess manuell abbreche (nachdem es tatsächlich Minuten gedauert hat, bis ich mich überhaupt in ein virtuelles Terminal eingeloggt habe!), Ist die Hälfte meiner laufenden Sitzung im Austausch, und ich muss eine Weile warten, bis das System reibungslos läuft nochmal.
Es gibt eine drakonische Lösung für das Problem: Erzwingen eines Speicherlimits. Aber dies systemweit zu tun, würde manchmal Prozesse beenden, die ich lieber noch brauche, und wenn ich manuell muss, ulimitbevor ich einen beleidigenden Prozess starte ... nun, ich werde oft vergessen, bis es zu spät ist.
Mögliche Arten von Lösungen, mit denen ich zufriedener wäre:
- Wenn ein Prozess eine bestimmte Speichernutzung überschreitet, wird er künstlich gedrosselt, damit der Rest des Systems reagiert.
- Wenn ein Prozess eine bestimmte Speichernutzung überschreitet, ist er
SIGSTOPped, sodass ich Zeit habe, um herauszufinden, was als nächstes zu tun ist. - Wenn sich ein Prozess dem RAM-Limit nähert, erhalte ich eine Warnung, bevor der große Austausch beginnt.
Gibt es eine Möglichkeit, ein solches Verhalten oder ähnliches zu erreichen?
ulimitist.