メモリが足りない場合は、システムを再起動する必要がありますか?

メモリが足りない場合は、システムを再起動する必要がありますか?

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カーネルはシステムをリセットできます。これは、特別な監視ハードウェアを使用するか、カーネルの信頼性が低いソフトウェア専用監視装置を使用して実行できます。どちらにしても、システムが正常に動作していることをカーネルに通知するデーモンプロセスが必要です。デーモンがこの操作の実行を停止すると、システムはリセットされます。

ウォッチドッグはそのようなデーモンです。 /dev/watchdogを開き、ここにデータを頻繁に記録してカーネルのリセットを防ぎます(少なくとも1分に1回)。各書き込みは再起動時間を1分遅らせます。 1分間アクティビティがないと、監視ハードウェアがリセットされます。ソフトウェア監視の場合、再起動機能はシステムの状態と割り込みによって異なります。

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

また、見ることができますRaspberry PiとArduino:監視タイマーを使用して安定したシステムを構築

答え2

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

vm.panic_on_oom=1
kernel.panic=10

これにより、システムにメモリが不足するとカーネルがパニック状態になり、パニックが発生してから10秒後に再起動します。

cgroups2を完全にサポートする新しいシステムでは、systemd-oomdはあまり大胆でない選択肢かもしれません。

関連情報