GNU/Linux >> LINUX-Kenntnisse >  >> Linux

„Kill The Biggest Process“-Button?

Dieser Laptop hat eine SSD und deshalb habe ich mich entschieden, 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 zum Beenden des größten Prozesses zu implementieren, die direkt zum Kernel führt, falls ich das Einfrieren schnell genug bemerke? Oder, weil es ein Computer ist, wäre eine Heuristik dafür, wann er anfängt einzufrieren und den größten Prozess selbst abzuschießen, auch in Ordnung.

Akzeptierte Antwort:

Aus Ihrem Kommentar klingt es so, als würde das System nur tauschen.

Linux hat einen OOM-Killer, der aufgerufen wird, wenn das System seinen Arbeitsspeicher überbelegt hat und nun aufgebraucht ist.
Linux führt standardmäßig eine Überbelegung des Arbeitsspeichers durch, was im Grunde bedeutet, dass es Programmen mehr Arbeitsspeicher gibt, als das System tatsächlich hat. Dies geschieht unter der Annahme, dass die Programme nicht den gesamten angeforderten Speicher verwenden. Wenn dem System jedoch der Speicher ausgeht, hat es den verschiedenen laufenden Prozessen bereits mitgeteilt, dass sie über den Speicher verfügen, sodass es ihn nicht mehr einfach verweigern kann. Stattdessen wird der OOM-Killer aufgerufen. Der OOM-Killer findet im Grunde einen Prozess, von dem der Kernel glaubt, dass er den Out-of-Memory-Zustand lindern wird. Normalerweise ist dies nur der Prozess, der am meisten Speicher verbraucht, aber der Algorithmus ist tatsächlich viel komplexer.

Da Sie overcommit_memory haben auf gesetzt (automatischer Modus) führt der Kernel eine Speicherüberschreibung durch. Aus Ihrem erklärten Verhalten klingt es also so, als ob das System nur stark austauscht.

Von hier aus gibt es 2 Möglichkeiten.

Austausch reduzieren

Ihrem System geht der Arbeitsspeicher aus, und der Kernel beginnt, Dinge in den Swap zu schieben. Wenn Ihrem System der Swap-Speicher ausgeht, ruft es den OOM-Killer auf. Da Sie jedoch noch freien Auslagerungsspeicher haben, passiert 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 SysRq-Trigger des Kernels erfolgen.

Der Kernel hat das, was er „Magic SysRq“ nennt. Dies ist eine kleine Funktionalität, die den Kernel anweist, eine Art Notfalloperation durchzuführen. Das können Dinge sein wie „alle Volumes schreibgeschützt neu mounten“, „alle Dateisysteme synchronisieren“ oder „jetzt neu starten“. Eine dieser Optionen ist auch das Aufrufen des OOM-Killers.

Verwandte:Wie führt man Integer- und Float-Berechnungen in Bash oder anderen Sprachen/Frameworks durch?

Wenn Ihr Kernel Magic SysRq aktiviert hat (Kernel-Option CONFIG_MAGIC_SYSRQ ), können Sie dies auf zwei Arten tun.

  1. Alt + SysRq + f
    Drücken Sie einfach diese 3 Tasten auf der Tastatur.
  2. echo f > /proc/sysrq-trigger
    Dies führt genau die gleiche Aufgabe wie die Tastaturmethode aus, tut dies jedoch programmatisch.

Sie könnten Swap auch vollständig deaktivieren, und das mache ich auf den meisten meiner Systeme, und genau aus diesem Grund. Swap ist insofern vorteilhaft, als der Kernel Daten, die nicht verwendet werden, präventiv auslagert, sodass mehr RAM für das Caching verwendet wird. Aber es führt zu diesem erzwungenen Austauschproblem, das Sie sehen.

Ich persönlich denke, dass die beste Lösung eine Art Kernel-Option ist, um den OOM-Killer beim erzwungenen Austauschen aufzurufen. Lassen Sie im Grunde preemptive Swaps funktionieren, aber wenn der Kernel gezwungen ist, etwas in den Swap zu verschieben, weil Sie keinen RAM mehr haben, dann rufen Sie den OOM-Killer auf.
Leider ist dies nur mein persönlicher Wunsch. Das tut es nicht.


Linux
  1. Linux – Teilnahme an der Kernel-Mailingliste?

  2. Linux – Warum kann der Kernel Init nicht ausführen?

  3. Linux – Proprietäre oder geschlossene Teile des Kernels?

  4. Die ultimativen Linux-Interviewfragen:Swap

  5. Ausführen einer User-Space-Funktion aus dem Kernel-Space

Wie der Linux-Kernel mit Interrupts umgeht

So überprüfen Sie die Kernel-Version in Linux

Anpassen von Grub auf einfache Weise:Grub-Customizer

Verwalten von Swap im modernen Linux-System

Wie überprüfe ich HZ im Terminal?

Wohin geht der verbleibende Speicher von vm.overcommit_ratio?