メモリが不足した場合、システムを再起動しますか?

メモリが不足した場合、システムを再起動しますか?

SSH 経由でリモート コンピューターでメモリを大量に消費するテストを実行する必要があります。前回これを実行したとき、コンピューターが応答しなくなり、誰かが物理的に再起動する必要がありました。

メモリが多すぎる場合にシステムがフリーズするのではなく再起動するように設定する方法はありますか? (私はルート アクセス権を持っています)。カーネル バージョンは 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 もその 1 つです。

から男の番犬

Linux カーネルは、重大な問題が検出された場合、システムをリセットできます。これは、特別なウォッチドッグ ハードウェア、またはカーネル内のやや信頼性の低いソフトウェアのみのウォッチドッグを介して実装できます。いずれの場合も、システムが正常に動作していることをカーネルに通知するデーモンが必要です。デーモンが通知を停止すると、システムはリセットされます。

watchdog はそのようなデーモンです。/dev/watchdog を開き、カーネルがリセットされないように、少なくとも 1 分に 1 回は頻繁に書き込みを続けます。書き込みごとに、再起動時間が 1 分遅れます。1 分間何も操作しないと、watchdog ハードウェアによってリセットが発生します。ソフトウェア watchdog の場合、再起動できるかどうかは、マシンの状態と割り込みによって異なります。

カーネルが CONFIG_WATCHDOG_NOWAYOUT オプションを有効にしてコンパイルされていない限り、デバイス /dev/watchdog が正しく閉じられている場合は、再起動せずにウォッチドッグ デーモンを停止できます。

参照Raspberry Pi と Arduino: ウォッチドッグ タイマーを使用した信頼性の高いシステムの構築

答え2

特定の質問に答えるには、次のように sysctl を設定できます。

vm.panic_on_oom=1
kernel.panic=10

システムのメモリが不足するとカーネルがパニックになり、10 秒間のパニック後に再起動します。

cgroups2 を完全にサポートする新しいシステムでは、systemd-oomd はそれほど極端な選択肢ではないかもしれません。

関連情報