sysctlのカーネルパニックオプション
ちょいとカーネルパニックをどう設定すればよいかという話があって、ためしにsyscltをpanicでgrepすると、意外にというかpanicに関するパラメータがバラバラ出てきてどうすればよいかイマイチわからない。
# sysctl -a|grep panic fs.xfs.panic_mask = 0 kernel.hung_task_panic = 0 kernel.panic = 0 kernel.panic_on_io_nmi = 0 kernel.panic_on_oops = 1 kernel.panic_on_stackoverflow = 0 kernel.panic_on_unrecovered_nmi = 0 kernel.panic_on_warn = 0 kernel.softlockup_panic = 0 kernel.unknown_nmi_panic = 0 vm.panic_on_oom = 0
ということで整理してみた。
panicの整理
整理するとこんな感じ。
- パニック本体設定
-
- kernel.panic
-
- トリガー設定
panic系パラメータの関係
カーネルソースから各パラメータの関係を整理すとこうなる。
それぞれのパラメータの挙動
kernel.panic
- 説明
- panic時の挙動設定。kdump利用時は、このパラメータが使われている処理ロジックの前に、kdumpのセカンドカーネル起動が走るため、パラメータが使われることはない。
- 設定
- kernel.panic > 0:n秒後まって再起動
- kernel.panic = 0:ハング(デフォルト)
- kernel.panic < 0:即時再起動
kernel.panic_on_unrecovered_nmi
kernel.unknown_nmi_panic
kernel.panic_on_io_nmi
kernel.panic_on_warn
kernel.softlockup_panic
- 説明
- カーネルのwatchdog監視が有効(kernel.nmi_watchdogか、kernel.watchdogが1の場合、有効)の場合で、watchdog監視に引っかかった時のpanic発生有無。
- 設定
- kernel.softlockup_panic=0:panicしない(デフォルト)
- kernel.softlockup_panic=1:panicする
kernel.hung_task_panic
- 説明
- khungtaskカーネルスレッドが、TASK_UNINTERRUPTIBLE状態が120秒(デフォルト)超過しているスレッドを監視していて、該当するスレッドがいた時にpanicさせるかの設定。
- 設定
- kernel.hung_task_panic=0:panicしない(デフォルト)
- kernel.hung_task_panic=1:panicする