Dieser Laptop hat eine SSD und deshalb habe ich beschlossen, den Tausch wegzulassen. Dies funktioniert in den meisten Fällen gut, aber manchmal wird der Arbeitsspeicher etwas knapp und der Computer wird sehr träge und neigt zum Einfrieren. Gibt es eine Möglichkeit, eine Schaltfläche "Den größten Prozess beenden" zu implementieren, die direkt zum Kernel führt, falls ich das Einfrieren schnell genug bemerke? Oder, weil es sich um einen Computer handelt, wäre eine Heuristik für den Fall, dass er einfriert und den größten Prozess selbst aufnimmt, ebenfalls in Ordnung.
13
overcommit_memory
ist0
,overcommit_ratio
ist50
.Antworten:
Aus Ihrem Kommentar geht hervor, dass das System nur tauscht.
Linux hat einen OOM-Killer, der aufgerufen wird, wenn das System seinen Speicher überlastet hat und jetzt aufgebraucht ist.
Linux führt standardmäßig eine Speicherüberlastung durch, was im Grunde bedeutet, dass Programme mehr Speicher erhalten, als das System tatsächlich hat. Dies geschieht unter der Annahme, dass die Programme nicht den gesamten von ihnen angeforderten Speicher belegen. Wenn dem System jedoch der Arbeitsspeicher ausgeht, hat es den verschiedenen laufenden Prozessen bereits mitgeteilt, dass sie über den Arbeitsspeicher verfügen, sodass es nicht mehr einfach geleugnet werden kann. Stattdessen wird der OOM-Killer aufgerufen. Der OOM-Killer findet im Grunde genommen einen Prozess, von dem der Kernel glaubt, dass er den Zustand des Speichermangels lindert. Normalerweise ist dies nur der Prozess, der die meiste Speichermenge verwendet, aber der Algorithmus ist tatsächlich viel komplexer.
Da Sie
overcommit_memory
auf0
(automatischer Modus) eingestellt haben, führt der Kernel eine Speicherüberlastung durch. Aus Ihrem erklärten Verhalten geht hervor, dass das System nur stark austauscht.Ab hier gibt es 2 Möglichkeiten.
Swap reduzieren
Ihrem System geht der Arbeitsspeicher aus, und der Kernel beginnt, Dinge in den Swap zu schieben. Wenn Ihr System keinen Swap mehr hat, wird der OOM-Killer aufgerufen. Da Sie jedoch noch freien Swap-Speicherplatz haben, geschieht dies nicht.
Ihre ursprüngliche Idee, einen Prozess manuell zu beenden.
Sie können einen Prozess manuell beenden, wenn Sie der Meinung sind, dass das System zu viel austauscht und etwas sterben muss. Dies kann über die Kernel-SysRq-Trigger erfolgen.
Der Kernel hat das, was er "magisches SysRq" nennt. Dies ist eine Funktion, die den Kernel anweist, eine Art Notfalloperation auszuführen. Dies können Dinge wie "Alle Volumes schreibgeschützt erneut bereitstellen", "Alle Dateisysteme synchronisieren" oder "Jetzt neu starten" sein. Eine dieser Optionen besteht auch darin, den OOM-Killer aufzurufen.
Wenn in Ihrem Kernel Magic SysRq aktiviert ist (Kerneloption
CONFIG_MAGIC_SYSRQ
), können Sie dies auf zwei Arten tun.Drücken Sie einfach diese 3 Tasten auf der Tastatur.
echo f > /proc/sysrq-trigger
Dies führt genau die gleiche Aufgabe wie die Tastaturmethode aus, jedoch programmgesteuert.
Sie können Swap auch vollständig deaktivieren, und genau das mache ich auf den meisten meiner Systeme und genau aus diesem Grund. Swap ist insofern von Vorteil, als der Kernel Daten, die nicht verwendet werden, präventiv austauscht, sodass mehr von Ihrem RAM für das Caching verwendet werden kann. Aber es führt zu diesem erzwungenen Austauschproblem, das Sie sehen.
Ich persönlich denke, die beste Lösung ist eine Art Kernel-Option, um OOM-Killer beim erzwungenen Austausch aufzurufen. Lassen Sie Preemptive Swap grundsätzlich funktionieren, aber wenn der Kernel gezwungen ist, etwas in Swap zu verschieben, weil Sie nicht mehr über genügend RAM verfügen, rufen Sie OOM Killer auf.
Leider ist dies nur mein persönlicher Wunsch. Das macht es nicht.
quelle
top
oderps
Befehl kontinuierlich überwacht und diesen Prozess mitkill
Befehl beendet, wenn es einen bestimmten Schwellenwert überschreitet .grep -E "oom-killer|Killed process" /var/log/syslog /var/log/syslog.1