如果記憶體不足需要重新啟動系統嗎?

如果記憶體不足需要重新啟動系統嗎?

我需要透過 SSH 在遠端電腦上運行一些記憶體密集型測試。上次我這樣做時,電腦停止回應,需要有人物理重新啟動它。

有沒有辦法可以設定它,以便在使用過多記憶體時系統重新啟動而不是凍結? (我確實有 root 存取權限)。核心版本是4.9.0。

答案1

為了監視/恢復“不穩定”/飢餓伺服器的控制,我建議使用硬件,或使用軟體看門狗;在 Debian 中你可以使用以下指令安裝它:

sudo apt-get install watchdog

然後編輯/etc/watchdog.conf並添加閾值或測試;在我看來,看門狗也會被激活,如果核心在一段時間內沒有看到它,它就會重新啟動。例如,如果軟體例程沒有在固定時間內與/dev/watchdog0或類似的情況進行對話。

例如,您可以在下列位置定義負載閾值/etc/watchdog.conf

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

另請注意,某些主機板/晶片組帶有內置看門狗;如果我沒記錯的話,Arm A20 就是其中之一。

人看門狗

如果偵測到嚴重問題,Linux 核心可以重置系統。這可以透過特殊的看門狗硬體來實現,或者透過核心中可靠性稍差的純軟體看門狗來實現。無論哪種方式,都需要有一個守護程序來告訴核心系統正常運作。如果守護程序停止執行此操作,系統將被重置。

watchdog 就是這樣一個守護程式。它打開/dev/watchdog,並經常向其寫入數據,以防止內核重置(至少每分鐘一次)。每次寫入都會將重新啟動時間延遲一分鐘。一分鐘不活動後,看門狗硬體將導致重置。對於軟體看門狗,重新啟動的能力將取決於機器和中斷的狀態。

如果裝置 /dev/watchdog 正確關閉,則可以停止看門狗守護程式而不會導致重新啟動,除非您的核心是在啟用 CONFIG_WATCHDOG_NOWAYOUT 選項的情況下編譯的。

也可以看看Raspberry Pi 和 Arduino:使用看門狗定時器建立可靠的系統

答案2

要回答您的具體問題,您可以設定 sysctls,如下所示:

vm.panic_on_oom=1
kernel.panic=10

這樣,如果系統記憶體不足,核心就會出現恐慌,然後在恐慌十秒後重新啟動。

在完全支援 cgroups2 的新系統上,systemd-oomd 可能是一個不太激烈的選擇。

相關內容