Heute habe ich (aus Versehen) ein Programm auf meiner Linux-Box ausgeführt, das schnell viel Speicher verbraucht hat. Mein System fror ein, reagierte nicht mehr und ich konnte den Täter nicht mehr töten.
Wie kann ich das in Zukunft verhindern? Kann es nicht zumindest einen reaktionsfähigen Kern oder etwas am Laufen halten?
Antworten:
Ich wette, das System hat nicht wirklich "eingefroren" (in dem Sinne, dass der Kernel hängen geblieben ist), sondern reagiert einfach nicht mehr. Wahrscheinlich war es nur ein starker Austausch, wodurch die interaktive Leistung und der Systemdurchsatz wie ein Stein fielen.
Sie könnten Swap deaktivieren, aber das ändert nur das Problem von schlechter Leistung zu OOM-gestörten Prozessen (und all dem Spaß, der dazu führt), zusammen mit der verringerten Leistung aufgrund des weniger verfügbaren Festplatten-Cache.
Alternativ können Sie Ressourcenbeschränkungen pro Prozess verwenden (im Allgemeinen als
rlimit
und / oder bezeichnetulimit
), um die Möglichkeit zu beseitigen, dass ein einzelner Prozess eine lächerliche Menge an Speicher beansprucht und ein Auslagern verursacht, was Sie jedoch nur dazu bringt, mit Prozessen, bei denen es zu kurz kommt, auf unterhaltsames Terrain zu kommen Unbequeme Momente, weil sie etwas mehr Speicher haben wollten, als das System ihnen geben wollte.Wenn Sie wüssten, dass Sie etwas tun würden, das wahrscheinlich zu einer massiven Speichernutzung führen würde, könnten Sie wahrscheinlich ein Wrapper-Programm schreiben, das eine
mlockall()
Shell ausführt und dann ausführt. das würde es im Gedächtnis behalten und wäre die nächste Sache, um "einen reaktionsfähigen Kern zu behalten", die Sie wahrscheinlich bekommen werden (weil es nicht so ist, dass die CPU überlastet wird, das ist das Problem).Persönlich abonniere ich die Methode der Ressourcensteuerung "Mach keine dummen Dinge". Wenn Sie Root sind, können Sie einem System alle Arten von Schaden zufügen, und alles , von dem Sie nicht wissen , ob es wahrscheinlich ist, dass es zu einem riskanten Geschäft führt.
quelle
ulimit
oder sogar Gruppen, die heutzutage ein hippes Kind sind, erledigen diese Aufgabe recht gut. Wenn Sie Änderungen an Abfragen in der Produktion vornehmen, ohne deren Auswirkungen in einer nicht kritischen Umgebung zu überprüfen, liegt das an Ihrer Ursache.Wie oben in Kommentar von Tronic erwähnt, ist es möglich, Call OOM-Killer (aus Memory - Killer) direkt durch die Tastenkombination SysRq- F.
SysRqDie Taste wird normalerweise innerhalb der PrtScTaste auf Tastaturen kombiniert .
OOM-Killer beendet einen Prozess (-es) und das System reagiert wieder. Der direkte Zugriff auf OOM-Killer ist möglicherweise nicht standardmäßig aktiviert. Überprüfen Sie diese Frage, um herauszufinden, wie Sie ihren Status überprüfen und / oder aktivieren können.
PS: Das hat mir sehr geholfen. Ich stimme der Meinung zu, dass dies der nützlichste Hinweis zu diesem Problem ist, wenn es von Chrome oder einer speichergierigen Software verursacht wird. Aber Sie müssen bedenken, dass OOM-Killer einen wirklich wichtigen Prozess zum Erliegen bringen kann. Gehen Sie vorsichtig damit um.
quelle
Dies ist ein seit 2007 bekannter Fehler - siehe System friert bei hoher Speichernutzung ein .
In diesem Fall zeigt Windows ein Dialogfeld an, in dem der Benutzer aufgefordert wird, eine oder mehrere Anwendungen zu schließen.
quelle
Wenn Sie Lust haben, den Kernel neu zu kompilieren, können Sie den Patch aus dem
EDIT
Abschnitt dieser Frage ausprobieren : https://stackoverflow.com/q/52067753/10239615Er entfernt die
Active(file)
Seiten nicht bei hohem Speicherdruck und ermöglicht daher OOM-Killer Fast sofort auszulösen, da der Kernel nicht länger Minuten damit verbringen muss, die ausführbaren Codepages jedes Prozesses von der Festplatte neu zu lesen, was ein eingefrorenes Betriebssystem zur Folge hat.quelle
Dies ist besonders schwer zu verhindern. Es ist, weil der Kernel zu tauschen beginnt. Eine Lösung ist, Swap auszuschalten. Wenn auf dem System nicht mehr genügend Arbeitsspeicher zur Verfügung steht, bricht der Kernel einige Prozesse ab, anstatt mit dem Auslagern zu beginnen. In der Regel wird der richtige Prozess zum Beenden ausgewählt, aber es ist sowieso besser, einen zufälligen Prozess zu beenden, als ein nicht reagierendes System zu haben.
Dies kann eine besonders gute Lösung für Server sein, da Server oft genug RAM haben und wenn sie anfangen, Auslagerungsspeicher zu verwenden, bedeutet dies, dass sowieso etwas nicht stimmt. Desktops benötigen jedoch in der Regel den Swap-Speicherplatz. Daher gibt es meiner Meinung nach keine gute Lösung für Desktops. Ich schalte den Swap-Speicher in Servern oft aus, besonders wenn der Verdacht auf einen Speicherverlust besteht.
quelle