我需要透過 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 選項的情況下編譯的。
答案2
要回答您的具體問題,您可以設定 sysctls,如下所示:
vm.panic_on_oom=1
kernel.panic=10
這樣,如果系統記憶體不足,核心就會出現恐慌,然後在恐慌十秒後重新啟動。
在完全支援 cgroups2 的新系統上,systemd-oomd 可能是一個不太激烈的選擇。