Linuxカーネルパニックとkdump
カーネルパニックとダンプ採取ツールkdumpの話。以下、ほとんどIBMの公開資料からの抜粋なのだが、PDFが重いし、書き出さないと脳に落とし込めないので。。
Linuxカーネルは想定外の状況(カーネルがどのように処理を継続するべきか判断できない状況)が発生すると、panic()と呼ばれる特別な関数を実行する。これをカーネルパニックと呼ぶ。しかし、これはカーネルが自発的にpanic()関数を実行した場合に発生する現象なので、全てのカーネル障害でカーネルパニックが発生するわけではない。カーネルがpanic()関数の実行すら出来ずにフリーズする場合もある。
カーネルパニック発生時のサーバのメモリの内容をカーネルダンプに出力することが可能。RHEL5ではkdumpというツールを利用できるが、所定のrpmや設定が必要。なお詳細は割愛するが、diskdump、netdumpなど他のメモリダンプ機能もある。
kdumpではサーバのメモリ上にあらかじめカーネルダンプを出力するための特別なカーネル(クラッシュカーネル)を常駐させておく。カーネルパニックが発生すると、通常のカーネルからクラッシュカーネルに処理を委譲する。つまり、通常のカーネルには問題が発生しているため、安全のために新たなカーネルでカーネルダンプの出力処理を実施する、というわけだ。
ちなみに「クラッシュカーネルが使用するメモリ領域はサーバ起動時に確保され、通常のカーネルは使用しないように設計されている」そうだ。えーと、でもここには「事象発生時にセカンドカーネルを動作させるため、物理メモリをあらかじめセカンドカーネル用に割り当てておかねばならない」とも。。うーむ、この辺、ちょっと理解できてません。
以下の手順のことかな、、、
kdumpに関する設定ファイル
/boot/grub/grub.conf
クラッシュカーネル用のメモリ領域を指定。通常はcrashkernel=128M@16Mとする。この場合物理メモリの16MB〜(16+128)MBを使用する。
/etc/sysconfig/kdump
通常は変更必要なし
/etc/kdump.conf
カーネルダンプの出力方法の指定
大体、ダンプ出力先は/var/crash。これも設定しておく。詳しくはIBMの資料参照。それと、kdumpを利用するにはkdumpサービスを起動しておく必要があるので# chkconfig kdump on としておく。
他にもいろいろあるんだろうけど、今回はこの辺で。
また何か出て来たら追記。
参照URL
http://www-06.ibm.com/jp/domino01/mkt/cnpages7.nsf/page/default-003FFEF9
http://aozorlinux.exblog.jp/9365765/
関連記事
Linuxマシン突然再起動に関する備忘録
※カーネルパニック発生時に自動再起動させる設定など