@tooljpさんをフォロー

[FAQ CENTER トップ]
[redhat linux 技術ドキュメント トップ]

カーネルパニック(kernel panic)


日付 2009/10/22
環境 Redhat Enterprise linux 4 以降




1. カーネルパニックとは
カーネルパニックとは、カーネルで致命的なエラーが発生し、OSの稼動が完全に停止した状態の事を言います。OSを継続して稼動さえることは不可能であり、再起動するしかありません。エラーの原因を調査するために、カーネルパニック時にはメモリダンプ(カーネルダンプ、クラッシュダンプ、コアなどと呼ぶ場合も有ります)を出力することが可能です。メモリダンプとは実メモリの内容をファイルに出力する機能のことを言います。OSがsyslog (シスログ) に書き出す余裕もなくクラッシュするのでメモリダンプは唯一の解析の手がかりとなることもあります。OSを再起動すると、メモリダンプが /var/crash/<IP アドレス-YYYY-MM-DD-mm:ss>/vmcore にコピーされます。(diskdumpの場合)
参考:diskdumpの設定方法

2. カーネルパニックの種類
カーネルパニック時には自動的にはリブートされません。例えばカーネルパニック後の30秒後に自動起動するには以下の設定が必要です。

設定ファイル /etc/sysctl.conf
設定内容 kernel.panic=30


例えばRedhat Linux 4では以下の5種類の方法でカーネルパニックが発生します。

【重要】本ページでは手動で強制的にカーネルパニックを発生させる方法を紹介しています。しかしカーネルパニックは、ファイル・データや思わぬ損害が発生する可能性があるので、重要なファイルやデータのないサーバで実行してください。


(1) カーネル自身によるカーネルパニック
カーネルが致命的なエラーを検出し、カーネル自身でカーネルパニックとなる状況です。

(2) コマンド操作によるカーネルパニック
ユーザが任意でカーネルパニックを発生させることが可能です。以下のコマンドを実行します。
echo c > /proc/sysrq-trigger

(3) マジック SysRqキー
マジック SysRqキーとはユーザがコマンドを直接カーネルに渡すことができる機能のことを言います。
特定のキー(Sysrqキー)を押すことにより強制的にカーネルパニックを発生させることが可能です。デフォルトではオフであり、別途設定が必要です。

設定ファイル /etc/sysctl.conf
設定内容 kernel.sysrq = 1


(4) nmi_watchdog
nmi_watchdogとは定期的にカーネルハング(カーネルストール)を検出し、カーネルハング時には強制的にカーネルパニックさせる機能です。

具体的にはカーネルは定期的な割り込みでirq_stat[cpu].apic_timer_irqsの値を増加させます。

irq_stat[cpu].apic_timer_irqs++;

一方NMIにより定期的に irq_stat[cpu].apic_timer_irqsの値をチェックします。もしこの値が前回と同様なら、カーネルにより irq_stat[cpu].apic_timer_irqsの増加が実行されていない=カーネルハングと判断します。

(5) NMIボタン
NMI(Non-maskable Interrupt)ボタンとは、ハードウェアに装備された強制割り込みを発生させるスイッチです。通常は小さな穴形の形状をしています。サーバによってはNMIボタンは装備されていません。
以下の設定が必要です。

設定ファイル /etc/sysctl.conf
設定内容 kernel.unknown.nmi.panic=1


ただし NMIボタンは nmi_watchdogとは共存できません。nmi_watchdogを無効にしないと、カーネルはすぐにカーネルパニックとなります。以下の設定は grubでの nmi_watchdogの無効化例です。

設定ファイル /boot/grub/grub.conf
設定内容 nmi_watchdog=0 (kernelの行)



(6)カーネルダンプ出力中

【RedhatLinux】メモリの内容をカーネルダンプ用のファイルシステムに出力

[カーネルパニックが発生し、メモリの内容をカーネルダンプ用のファイルシステムに出力中]

【RedhatLinux】ファイルシステムへの出力が完了し

[カーネルダンプのメモリからカーネルダンプ用のファイルシステムへの出力が完了し、リブート待ち]



[カーネルダンプ用のファイルシステムからコアファイルに出力中]

(7)カーネルダンプの解析
デバッグツールを使用したカーネルダンプの解析方法(クラッシュの原因となったプロセス/スレッドや関数の調査)については以下で説明しています。

Redhat Linux カーネルダンプ(クラッシュダンプ) の解析方法

[redhat linux 技術ドキュメント トップ]
[FAQ CENTER トップ]