System neu starten, wenn nicht genügend Arbeitsspeicher vorhanden ist?

System neu starten, wenn nicht genügend Arbeitsspeicher vorhanden ist?

Ich muss einige speicherintensive Tests auf einem Remotecomputer über SSH ausführen. Als ich dies das letzte Mal tat, reagierte der Computer nicht mehr und musste manuell neu gestartet werden.

Gibt es eine Möglichkeit, es so einzurichten, dass das System neu gestartet wird, anstatt einzufrieren, wenn zu viel Speicher verwendet wird? (Ich habe Root-Zugriff.) Die Kernelversion ist 4.9.0.

Antwort1

Um die Kontrolle über einen „instabilen“/starver Server zu überwachen/wiederherzustellen, empfehle ich die Verwendung eines Hardware- oder, falls das nicht möglich ist, eines Software-Watchdogs. Unter Debian können Sie ihn wie folgt installieren:

sudo apt-get install watchdog

Dann bearbeitet /etc/watchdog.confund fügt man Schwellenwerte oder Tests hinzu; aus dem Stegreif wird der Watchdog auch so aktiviert, dass er neu startet, wenn der Kernel ihn längere Zeit nicht sieht, z. B. wenn eine Softwareroutine in einer festgelegten Zeit nicht antwortet /dev/watchdog0oder ähnliches.

Sie können beispielsweise Belastungsschwellenwerte wie folgt definieren /etc/watchdog.conf:

max-load-1             = 40
max-load-5             = 18
max-load-15            = 12

Beachten Sie auch, dass einige Boards/Chipsätze mit integrierten Watchdogs ausgestattet sind; wenn ich mich nicht irre, ist der Arm A20 einer davon.

AusMann Wachhund

Der Linux-Kernel kann das System zurücksetzen, wenn schwerwiegende Probleme erkannt werden. Dies kann über spezielle Watchdog-Hardware oder über einen etwas weniger zuverlässigen reinen Software-Watchdog im Kernel implementiert werden. In jedem Fall muss ein Daemon vorhanden sein, der dem Kernel mitteilt, dass das System einwandfrei funktioniert. Wenn der Daemon damit aufhört, wird das System zurückgesetzt.

watchdog ist ein solcher Daemon. Er öffnet /dev/watchdog und schreibt mindestens einmal pro Minute so oft dorthin, dass der Kernel nicht zurückgesetzt wird. Jeder Schreibvorgang verzögert den Neustart um eine weitere Minute. Nach einer Minute Inaktivität wird die Watchdog-Hardware den Reset auslösen. Beim Software-Watchdog hängt die Möglichkeit zum Neustart vom Zustand der Maschinen und Interrupts ab.

Der Watchdog-Daemon kann ohne Neustart gestoppt werden, wenn das Gerät /dev/watchdog ordnungsgemäß geschlossen wird, es sei denn, Ihr Kernel wurde mit der aktivierten Option CONFIG_WATCHDOG_NOWAYOUT kompiliert.

siehe auchRaspberry Pi und Arduino: Erstellen zuverlässiger Systeme mit WatchDog-Timern

Antwort2

Um Ihre spezielle Frage zu beantworten, können Sie Sysctls wie folgt festlegen:

vm.panic_on_oom=1
kernel.panic=10

Der Kernel gerät in Panik, wenn dem System der Arbeitsspeicher ausgeht, und startet dann nach zehn Sekunden Panik neu.

Auf neuen Systemen mit vollständiger cgroups2-Unterstützung ist systemd-oomd möglicherweise eine weniger drastische Option.

verwandte Informationen