OOM発生時にサーバーを再起動

この記事について

環境almalinux9
目的OOM(Out Of Memory)になったらサーバーを自動で再起動させる
結果vm.panic_on_oom=1 と kernel.panic=15 を sysctl.conf に設定した

つまずきポイント要約

  • vm.panic_on_oom=1 は cgroup 制限でメモリが残っているとパニックしない
  • sysctl に構文チェックコマンドはない(sysctl -p で反映して確認)

OOM(Out Of Memory)になったらサーバーを自動的に再起動する設定

現在のカーネルパラメータの値を表示

sysctl vm.panic_on_oom kernel.panic

結果

vm.panic_on_oom = 0
kernel.panic = 0

vm.panic_on_oomは、OOM Killer が実行される際に、カーネルパニックを起こさせるかを制御するパラメータ

0 → カーネルパニックしない
1 → カーネルパニックする。但し cgroup 制限により物理メモリがまだ残っている場合にはカーネルパニックしない。
2 → 必ずカーネルパニックする

カーネルパニックとは、windowsでいうブルースクリーン。オペレーティングシステム(OS)のカーネル部分において、何らかの理由で致命的なエラーが発生し、安全に復旧することができなくなった状態。

kernel.panic = 0 → なにもしない
kernel.panic = 30 → 30秒後にリブート

カーネルパラメータのうち、”vm.over” で始まる仮想メモリに関する設定項目だけを表示

sysctl -a | grep vm.over

現状(almalinux9初期値)

vm.overcommit_kbytes = 0
vm.overcommit_memory = 0
vm.overcommit_ratio = 50

vm.overcommit_memory は、メモリ割り当ての際にシステムがどれだけオーバーコミットを許すかを設定するためのパラメータで

vm.overcommit_memory:オーバーコミットするかどうかの設定
vm.overcommit_memory = 0 → オーバーコミット有効。実メモリの大きさまで割り当てる。
vm.overcommit_memory = 1 → オーバーコミット有効。実メモリ以上に割り当てる。

sysctl.conf を下記のように変更もしくは追記

#oom になったらカーネルパニックにさせてサーバーを再起動

vm.overcommit_memory=1
vm.panic_on_oom=1
#15秒後に再起動
kernel.panic=15

設定を反映(sysctlに構文チェックコマンドはないみたい)

sysctl -p

こちらも確認

タイトルとURLをコピーしました