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

Wie kann man unter Linux eine Aktion bei wenig Arbeitsspeicher auslösen?

Ja, der Linux-Kernel bietet dafür einen Mechanismus:Memory Pressure Notification . Dies ist dokumentiert in https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt, Abschnitt Memory Pressure .

Kurz gesagt, Sie registrieren einen eventfd-Dateideskriptor in /sys/fs/cgroup/memory/memory.pressure_level auf dem Sie Benachrichtigungen erhalten möchten. Diese Benachrichtigungen können low sein , medium , oder critical . Ein typischer Anwendungsfall wäre, einige oder alle internen Caches in Ihrem Prozess freizugeben, wenn Sie eine Benachrichtigung erhalten, um einen bevorstehenden OOM-Kill zu verhindern.


Was Sie fragen, ist im Grunde ein Kernel-basierter Rückruf bei einer Bedingung mit wenig Arbeitsspeicher, richtig? Wenn dem so ist, glaube ich fest daran, dass der Kernel dies nicht tut einen solchen Mechanismus bereitzustellen, und das aus gutem Grund: Da der Speicher knapp ist, sollte es sofort das einzige ausführen, das etwas Speicher freigeben kann - den OOM-Killer. Alle anderen Programme können die Maschine zum Stillstand bringen.

Wie auch immer, Sie können eine einfache Überwachungslösung im Userspace ausführen. Ich hatte in der Vergangenheit die gleiche Debug-/Aktionsanforderung für wenig Arbeitsspeicher und schrieb eine einfache Bash, die Folgendes tat:

  • Achten Sie auf ein weiches Wasserzeichen: Wenn die Speichernutzung über diesem Schwellenwert liegt, sammeln Sie einige Statistiken (Prozesse, freier/verwendeter Speicher usw.) und senden Sie eine Warn-E-Mail;

  • Achten Sie auf ein hartes Wasserzeichen: Wenn die Speichernutzung über diesem Schwellenwert liegt, sammeln Sie einige Statistiken und beenden Sie die speicherintensiveren (oder weniger wichtigen) Prozesse und senden Sie dann eine Warn-E-Mail.

Ein solches Skript wäre sehr leicht und kann die Maschine in kleinen Intervallen abfragen (zB:15 Sekunden)


Linux
  1. So überprüfen Sie die Speichernutzung in einem Linux-basierten Server

  2. Wie protokolliere ich den Speicherverbrauch unter Linux?

  3. So verwenden Sie Shared Memory mit Linux in C

  4. Wie funktioniert die Stapelzuweisung unter Linux?

  5. Wie konfiguriere ich Swapiness in der Linux-Speicherverwaltung?

So überprüfen Sie die Speichernutzung in Linux

So überprüfen Sie den gemeinsam genutzten Linux-Speicher mit dem ipcs-Befehl

So löschen Sie den Auslagerungsspeicher unter Linux

So deaktivieren Sie Swap dauerhaft unter Linux

Wie kann ich Speicherplatz auf einer Linux-Instanz bereinigen?

Wie funktioniert Swap-Speicher in Linux?