Ich habe eine ziemlich alte Linux-Maschine mit 2 GB RAM, kein Swap, und sie funktioniert sehr gut, da das System jeden nicht verwendeten Speicherplatz für das Caching mit großer Wirkung verwendet.
Wenn ich jedoch kurz davor bin, den Speicher zu belasten (z. B.> 1950 MB zugewiesen), verlangsamt sich das Crawlen. Ich vermute, das liegt daran, dass keine Festplattenpuffer mehr vorhanden sind. Ich weiß, dass der OOM-Killer bald in Kraft treten würde, aber er kommt normalerweise nicht dort an - er wird so langsam, dass das Laden auf 30-40 schießt, kein Prozess Fortschritte macht (also nicht mehr Speicher zuweist), und Ich muss es neu starten.
Wenn ich versuche, nur einen Prozess abzubrechen, damit der Computer reagiert, z. B. indem ich zur Konsole gehe (über Alt-F1, Anmelden und nur einen "Killall Badprocess"), funktioniert dies normalerweise, außer dass ich warten muss ~ 10 Minuten zwischen Benutzer / Passwort und dem Erhalten einer Eingabeaufforderung - alles während der Festplattenaktivität.
Auch hier gibt es keinen Tausch, es wird also nicht getauscht - es wird nur verprügelt, weil keine Puffer mehr vorhanden sind.
Ich hätte ungefähr 100 MB ausschließlich für Festplattenpuffer, was den OOM-Killer früher auslösen würde (immerhin weniger Speicher für Programme), aber andererseits die Maschine jederzeit reaktionsfähig machen würde.
Gibt es eine Möglichkeit, das zu tun? Ich konnte keinen / proc / kernel- oder / sys / vm-Eintrag finden, der so etwas macht.
Antworten:
Schauen Sie sich / proc / sys / vm / min_free_kbytes an . Es ist die Grenze der freien KB, die den Oom-Killer auslöst. Es wäre auch gut, in den Protokollen nach dem Schlüsselwort oom- kill zu suchen, um zu wissen, was getötet wird {wahrscheinlich willst du ssh nicht töten , du solltest es besser wiederholen }
quelle
Das Warten auf den Oom-Killer, um Speicher freizugeben, ist ein bisschen so, als würde man darauf warten, dass der Motor an Ihrem Auto stoppt, um Ihnen mitzuteilen, wann es Zeit ist, Ihren Benzintank aufzufüllen. Der Oom-Killer ist ein hartnäckiges Werkzeug der letzten Instanz und der Verzweiflung nach einer ressourcenarmen Maschine. Das nächste Programm, das es berührt, wird beendet, ohne zu berücksichtigen, wie sich dies auf Ihre Anwendung, Erreichbarkeit, Zuverlässigkeit usw. auswirkt. Wenn der Oom-Killer aufgerufen wird, schnappt Ihr Server nach Luft und befindet sich in einem kritischen Zustand.
Stattdessen ist es viel besser, wenn Sie Ihre Speichernutzung in Ihrer Anwendungsumgebung aktiv verwalten. Sie können / proc / meminfo auf Probleme überwachen und geeignete Maßnahmen ergreifen und Ihre Arbeitslast drosseln, bevor eine ernsthafte Situation hässlich wird.
quelle
oom_adj
richtig eingestellt haben, kann Ihr Desktop-System ein bisschen wie Android funktionieren, wo das System praktisch immer gegen OOM Killer läuft (technisch gesehen gibt es einen "Low Memory Killer" und es ist über eingestellt/sys/module/lowmemorykiller
). Die Logik besteht darin, unkritische Hintergrundprozesse kontinuierlich als potenzielle Opfer für OOM-Killer zu markieren, nach getöteten Prozessen zu suchen und die erforderlichen getöteten Programme langsam neu zu starten, um eine Überlastung des Systems zu vermeiden. Stellen Sie einfach sicher, dass der Prozess, bei dem andere Prozesse immer wieder neu gestartet werden, außerhalb der Grenzen von OOM Killer liegt.