Linuxカーネルのクラッシュダンプを取るには、Red Hat系だと diskdump と netdump があると思います。
ちなみに、RHEL5(Red Hat Enterprise Linux 5)だと kexec を使った kdump もありますし、SLES(SUSE LINUX Enterprise Server)だと LKCD が標準のようです。
クラッシュダンプをネットワーク上のサーバに保存する netdump を試してみたので、メモしておきます。
ローカルディスク上に保存する diskdump も試したのですが、システムディスクは swap も含めて全て md でミラーリングする予定です。 diskdump では mdデバイスには保存できないようだし、ダンプ用に専用パーティションを設定しておくのももったいない。ということで、netdumpになりました。
サーバ、クライアントとも RHEL4 U4 で試しました。
もちろん、CentOSでも同じようにできるはずです。
例として、サーバIP:192.168.1.1 クライアントIP:192.168.1.20 とします。
パッケージ確認。
[server]# rpm -q netdump-server netdump-server-0.7.16-2netdumpユーザのパスワード設定。
netdump-serverがインストールされていれば、netdumpユーザが作成されていますが、パスワードがロックされているので設定。
[server]# passwd netdumpnetdumpサーバーの起動。
[server]# service netdump-server startシステム起動時に自動的に起動させる設定。
[server]# chkconfig netdump-server onnetdumpクライアント設定
パッケージ確認。
[client]# rpm -q netdump netdump-0.7.16-2/etc/sysconfig/netdump を変更。
ダンプ用のネットワークとして eth1 を使う場合は DEV=eth1 とする。
# DEV= NETDUMPADDR=192.168.1.1DSA公開鍵の登録。
[client]# service netdump propagate netdump@192.168.1.1's password:netdumpクライアントの起動。
[client]# service netdump startシステム起動時に自動的に起動させる設定。
[client]# chkconfig netdump on/etc/sysctl.conf を変更して、マジックSysRqキーを有効にし、ハング時に [Alt] + [SysRq] + [c] でダンプできるようにする。
kernel.sysrq = 1設定を読み込み。または echo 1> /proc/sys/kernel/sysrq で設定。
[client]# sysctl -p /etc/sysctl.confダンプテスト
netdumpクライアントが起動していれば、サーバの /var/crash/ 以下に <クライアントipアドレス>-YYYY-MM-DD-hh:mm といったディレクトリが作成されているはずです。
このディレクトリの log ファイルにコンソールに出力されたメッセージが記録されます。
まず、クラッシュさせる前に、簡単な動作確認。
クライアントで echo h> /proc/sysrq-trigger を実行して、サーバのログに以下のように記録されていればOKでしょう。
SysRq : HELP : loglevel0-8 reBoot Crash tErm kIll saK showMem powerOff showPc unRaw Sync showTasks Unmount shoWcpus
次に実際にダンプさせてみます。
コマンドでは、echo c> /proc/sysrq-trigger ですが、実際にハングした場合は、コマンドは入力できないので、キーボードから [Alt] + [SysRq] + [c] でテストします。
SysRqキーについては、以下が参考になります。
アジアのペンギン: SysRqキーの使用方法
例えば、16GBメモリのシステムで試したところ、以下のような感じでした。
[server]# ls -lh /var/crash/192.168.1.20-2007年08月16日-20:33 total 16G -rw------- 1 netdump netdump 74K Aug 16 20:44 log -rw------- 1 netdump netdump 18G Aug 16 20:44 vmcore何回か試したところ、GbE接続で約4分〜7分ほどで完了しました。
もちろん、システムや環境によって必要な時間は変わってくるので一概には言えませんが。
これで、netdumpでクラッシュダンプを取得するところまでできました。
長くなったので、後で別エントリで補足したいと思います。
[2007年 8/25追記]
しげふみメモ:netdumpでクラッシュダンプ取得の補足
4797338261
トラックバック一覧
-
1. netdumpでクラッシュダンプ取得の補足
- [しげふみメモ]
- 2007年08月23日 01:36
- 前回の記事で netdumpでクラッシュダンプ取得するところまでできましたが、ちょっと補足。 ダンプ解析 取得したカーネルのダンプファイルの解析には kernel-debuginfo パッケージが必要。 crashコマンドを使うようですが、まだ試したことはありません。 このあたり...
コメントする
しげふみ
コメント一覧 (6)
Linux初心者なのですが、突然「今の環境でnetdump使えるようにしとけ」と命じられ困り果てていた所、貴殿のサイトに辿り着きました。
我が社のとある環境を構築しているのですが、rpm -q netdump-server のコマンドを実行しても、 netdump-server-(バージョン情報)が表示されません。これはインストール時に導入すべきパッケージなのでしょうか?
いきなりで大変失礼ではありますが、コメントへの返事か、メールを頂けたら大変光栄です。
netdump-serverのパッケージは、OSインストール時のパッケージ選択によってはインストールされていない可能性もあります。
その場合は、CDなどから追加でインストールすることになると思います。
先日は、拙い質問に解答を頂きありがとうございます。
パッケージをCDから発見し、インストールできました。
さらに、質問になってしまうのですが、お時間があれば解答を頂けたら、と思います。
現在、このような環境です。
・Linuxサーバ(災対用に二台)RHEL 4
・Linux導入PC(ネットワーク設定なし)RHEL 4
・windowsPC(teratermのsshでLinuxサーバにログイン)
上記の環境の場合どのマシンが、サーバ・クライアントにあたるのでしょうか?
それとも、netdumpサーバ用に、もう一台あるいは、外付けのメディアが必要なのでしょうか?
それとも、二台をサーバとクライアントにそれぞれ設定するのが一般的でしょうか?
今後、待機系として、もう一台を用意するかも検討中です。
ご教授お願いできますでしょうか?
私の個人的な意見なので、一般的かどうかは分かりませんが。
「Linuxサーバ」が2台あったとしても、それはユーザへのサービスに使用しているので、netdumpサーバにはしないほうがいいと考えます。
例えば、主サーバと副サーバがあったとして、主サーバが落ちてサービスが副サーバに切り替わっている時に、主サーバのnetdumpを副サーバが受けることになると、肝心のサービスに影響があるかもしれません。
「Linux導入PC」がどのような役割か分かりませんが、これをnetdumpサーバとして、「Linuxサーバ」をnetdumpクライアントにすることを検討します。
やっと分かってきた気がします。
netdumpを出力する筐体がnetdumpクライアント。netdumpサーバは、あくまでダンプが吐き出されるための筐体であって、システムを運営するサーバをnetdumpサーバにしてはいけないのですね!
では、先ほど記載した環境を運営する際に、運用端末を一台用意し、それをnetdumpサーバにすればよさそうですね!
と、勢いよく言いましたがあっているのでしょうか。。。
そんな感じでいいかと思います。
あとは、このブログだけではなく、いろんな人の意見を聞いたり、調べたりしてみてください。