@tooljpさんをフォロー

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

1.デバッグツールのダウンロード

Redhat 4 用のデバッグツールは以下からダウンロード可能です。

ftp://ftp.redhat.com/pub/redhat/linux/updates/enterprise/4ES/en/os/Debuginfo/x86_64/RPMS/

今回のテストで使用する Redhat Linux のカーネルは 2.6.9-78.0.22 です。以下のデバッグツールをダウンロードします。

カーネル 2.6.9-100.EL (x86_64) 用のデバッグツール

以下のように rpm コマンドでインストールを実行します。

# uname -a
Linux testserver.localdomain 2.6.9-78.0.22.ELsmp #1 SMP Fri Apr 24 12:48:19 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
# rpm -ivh kernel-debuginfo-2.6.9-78.0.22.EL.x86_64.rpm
警告: kernel-debuginfo-2.6.9-78.0.22.EL.x86_64.rpm: V3 DSA signature: NOKEY, key ID db42a60e
Preparing... ########################################### [100%]
1:kernel-debuginfo ########################################### [100%]

インストールされたことを確認します。

# ls /usr/lib/debug/lib/modules/ | grep 2.6.9-78.0.22
2.6.9-78.0.22.EL
2.6.9-78.0.22.ELlargesmp
2.6.9-78.0.22.ELsmp
2.6.9-78.0.22.ELxenU


2.デバッグの実行

crash コマンドを実行します。
1番目の引数はカーネルに対応したシステムマップファイル
2番目の引数はインストールしたデバッグ情報
3番目の引数はカーネルダンプ

# crash /boot/System.map-2.6.9-78.0.22.ELsmp /usr/lib/debug/ lib/modules/2.6.9-78.0.22.ELsmp/vmlinux /var/crash/127.0.0.1-2012-05-16-02\:35/vmcore

crash 4.0-4.3.0
Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc.
Copyright (C) 2004, 2005, 2006 IBM Corporation
Copyright (C) 1999-2006 Hewlett-Packard Co
Copyright (C) 2005, 2006 Fujitsu Limited
Copyright (C) 2006, 2007 VA Linux Systems Japan K.K.
Copyright (C) 2005 NEC Corporation
Copyright (C) 1999, 2002 Silicon Graphics, Inc.
Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc.
This program is free software, covered by the GNU General Public License,
and you are welcome to change it and/or distribute copies of it under
certain conditions. Enter "help copying" to see the conditions.
This program has absolutely no warranty. Enter "help warranty" for details.

GNU gdb 6.1
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu"...

SYSTEM MAP: /boot/System.map-2.6.9-78.0.22.ELsmp
DEBUG KERNEL: /usr/lib/debug/lib/modules/2.6.9-78.0.22.ELsmp/vmlinux (2.6.9-78.0 .22.ELsmp)
DUMPFILE: /var/crash/127.0.0.1-2012-05-16-02:35/vmcore
CPUS: 2
DATE: Wed May 16 02:35:30 2012
UPTIME: 00:11:05
LOAD AVERAGE: 0.00, 0.14, 0.15
TASKS: 63
NODENAME: testserver.localdomain
RELEASE: 2.6.9-78.0.22.ELsmp
VERSION: #1 SMP Fri Apr 24 12:48:19 EDT 2009
MACHINE: x86_64 (2001 Mhz)
MEMORY: 1 GB
PANIC: "Oops: 0002 [1] SMP " (check log for details)
PID: 8110
COMMAND: "bash"
TASK: 1003d5977f0 [THREAD_INFO: 1003cdd4000]
CPU: 1
STATE: TASK_RUNNING (SYSRQ)

crash> bt
PID: 8110 TASK: 1003d5977f0 CPU: 1 COMMAND: "bash"
#0 [1003cdd5ce0] start_disk_dump at ffffffffa02223ff
#1 [1003cdd5d10] try_crashdump at ffffffff8014cf15
#2 [1003cdd5d20] do_page_fault at ffffffff80124ba8
#3 [1003cdd5e00] error_exit at ffffffff80110e21
[exception RIP: sysrq_handle_crash]
RIP: ffffffff8023eb1c RSP: 000001003cdd5eb0 RFLAGS: 00010012
RAX: 000000000000001f RBX: ffffffff804141a0 RCX: 0000000000000046
RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000063
RBP: 0000000000000063 R8: 00000000000927c0 R9: ffffffff804141a0
R10: ffffffff80325220 R11: 0000ffff80411aa0 R12: 0000000000000000
R13: 0000000000000000 R14: 0000000000000006 R15: 0000000000000246
ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018
#4 [1003cdd5eb0] __handle_sysrq at ffffffff8023ecdf
#5 [1003cdd5ef0] write_sysrq_trigger at ffffffff801b3fdd
#6 [1003cdd5f10] vfs_write at ffffffff8017c10e
#7 [1003cdd5f40] sys_write at ffffffff8017c1f6
#8 [1003cdd5f80] system_call at ffffffff801102f6
RIP: 0000002a9592cf12 RSP: 0000007fbffff110 RFLAGS: 00010287
RAX: 0000000000000001 RBX: ffffffff801102f6 RCX: 0000002a98a00000
RDX: 0000000000000002 RSI: 0000002a98a00000 RDI: 0000000000000001
RBP: 0000000000000002 R8: 0000000000000001 R9: 0000002a95aa86e0
R10: 0000000000000022 R11: 0000000000000246 R12: 0000002a95aa28c0
R13: 0000002a98a00000 R14: 0000000000000002 R15: 0000000000000000
ORIG_RAX: 0000000000000001 CS: 0033 SS: 002b

bt コマンドでスタックを表示します。COMMAND:の次のプロセス/スレッドが実際にクラッシュの原因となったプロセス/スレッドです。
#7の sys_write がクラッシュの原因となった関数と推測できます。

その他
ps・・・プロセス一覧を表示
net・・・ネットワーク情報を表示
dev・・・デバイス情報を表示
irq・・・割り込み情報を表示
mount・・・マウント情報を表示
mod・・・モジュール情報を表示

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


(ご注意) 本サイト内の内容を使用して発生したいかなる時間的損害、金銭的損害あるいはいかなる損害に対して、いかなる人物も一切の責任を負いません。あくまでも個人の判断で使用してください。
本サイト内掲載されている情報は、著作権法により保護されています。いかなる場合でも権利者の許可なくコピー、配布することはできません。
このページはリンクフリーです。(このページへの直接リンクも可能です。)
雑誌等での紹介は特に連絡は不要です。