のぴぴのメモ

自分用のLinuxとかの技術メモ

【RHEL7】sysctlのカーネルパニックオプション

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
  • トリガー設定
    • NMI割込みトリガー(SVP/iLO2とかからのNMI割込みによるダンプ取得)
      • kernel.panic_on_unrecovered_nmi
      • kernel.unknown_nmi_panic
      • kernel.panic_on_io_nmi
    • OOPSメッセージトリガー
      • kernel.panic_on_oops
    • カーネル警告メッセージトリガー
      • kernel.panic_on_warn
    • watchdogトリガー
      • kernel.softlockup_panic
    • ハングタスクチェックトリガー
      • kernel.hung_task_panic
    • カーネル内のスタックオーバーフロートリガー
      • kernel.panic_on_stackoverflow
    • OOM killerトリガー
    • xfs系統
      • fs.xfs.panic_mask

panic系パラメータの関係

カーネルソースから各パラメータの関係を整理すとこうなる。
f:id:nopipi:20150516115617p:plain

それぞれのパラメータの挙動

kernel.panic

  • 説明
    • panic時の挙動設定。kdump利用時は、このパラメータが使われている処理ロジックの前に、kdumpのセカンドカーネル起動が走るため、パラメータが使われることはない。
  • 設定
    • kernel.panic > 0:n秒後まって再起動
    • kernel.panic = 0:ハング(デフォルト)
    • kernel.panic < 0:即時再起動

kernel.panic_on_unrecovered_nmi

  • 説明
    • メモリECCで修復不能なエラー、PCI通信の致命的エラー、あとサーバ管理コンソール(SVP/CMM/iLO2)からのダンプ取得のためのNMI割込み時に、panicさせるかの設定。
  • 設定
    • kernel.panic_on_unrecovered_nmi=0:panicしない(デフォルト)
    • kernel.panic_on_unrecovered_nmi=1:panicする

kernel.unknown_nmi_panic

  • 説明
    • kernel.panic_on_unrecovered_nmiとほぼ同じで、PCI通信の致命的エラー時のpanicが含まれないだけ。なのでpnic_on_unrecovered_nmiだけ設定すれば十分。
  • 設定
    • kernel.kernel.unknown_nmi_panic=0:panicしない(デフォルト)
    • kernel.kernel.unknown_nmi_panic=1:panicする

kernel.panic_on_io_nmi

  • 説明
    • IOエラーが原因で NMI割込みが発生した場合のpanic有無。致命的なパターンなのでpanicがいいのかな。またHPのサーバではiLO2からのダンプ取得のためにONにするようなことが書かれている。
  • 設定
    • kernel.panic_on_io_nmi=0:panicしない(デフォルト)
    • kernel.panic_on_io_nmi=1:panicする

kernel.panic_on_warn

  • 説明
    • カーネルのワーニング出力時(WARN()呼び出し時)にpanicさせるかの設定。カーネルのデバックでもない限り、WARN()ごときでpanicさせないだろう。
  • 設定
    • kernel.panic_on_warn=0:panicしない(デフォルト)
    • kernel.panic_on_warn=1:panicする

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する

kernel.panic_on_stackoverflow

  • 説明
    • カーネル内でスタックオーバーフローが発生した時にpanicさせるかの設定。
  • 設定
    • kernel.panic_on_stackoverflow=0:panicしない(デフォルト)
    • kernel.panic_on_stackoverflow=1:panicする

vm.panic_on_oom

  • 説明
    • OOM killer発生時のpanic有無
  • 設定
    • vm.panic_on_oom=0:panicしない(デフォルト)
    • vm.panic_on_oom=1:panicする。ただし、cgroupの制限に引っかかった場合はpanicしない。
    • vm.panic_on_oom=2:panicする。cgroup制限も含め問答無用でpanicする。