web-dev-qa-db-ja.com

クラッシュからのカーネルパニックメッセージを分析して問題を診断する方法

私のCentOS 6.8サーバーは数日おきにクラッシュし、その理由を理解しようとしています。カーネルバージョン2.6.32-642.1.1.el6.x86_64を使用しています。これまでのところ、私はプログラムcrashをインストールして、カーネルパニックから作成されたカーネルダンプをふるい分けできるようにしています。しかし、正直に言って、出力される情報の多くを本当に理解していません。

[root@resh boot]# crash /usr/lib/debug/lib/modules/2.6.32-642.1.1.el6.x86_64/vmlinux /var/crash/127.0.0.1-2016-08-02-09\:12\:20/vmcore
KERNEL: /usr/lib/debug/lib/modules/2.6.32-642.1.1.el6.x86_64/vmlinux
DUMPFILE: /var/crash/127.0.0.1-2016-08-02-09:12:20/vmcore  [PARTIAL DUMP]
CPUS: 32
DATE: Tue Aug  2 09:09:29 2016
UPTIME: 12:47:24
LOAD AVERAGE: 4.78, 4.66, 4.55
TASKS: 998
NODENAME: resh.cluster.org
RELEASE: 2.6.32-642.1.1.el6.x86_64
VERSION: #1 SMP Tue May 31 21:57:07 UTC 2016
MACHINE: x86_64  (2294 Mhz)
MEMORY: 31.8 GB
PANIC: "BUG: unable to handle kernel NULL pointer dereference at 0000000000000002"
PID: 42993
COMMAND: "kslowd002"
TASK: ffff88040d88d520  [THREAD_INFO: ffff880100000000]
CPU: 7
STATE: TASK_RUNNING (PANIC)

クラッシュバックトレース:

crash> bt
PID: 42993  TASK: ffff88040d88d520  CPU: 7   COMMAND: "kslowd002"
#0 [ffff8801000039c0] machine_kexec at ffffffff8103fdcb
#1 [ffff880100003a20] crash_kexec at ffffffff810d1fe2
#2 [ffff880100003af0] oops_end at ffffffff8154bd00
#3 [ffff880100003b20] no_context at ffffffff810518cb
#4 [ffff880100003b70] __bad_area_nosemaphore at ffffffff81051b55
#5 [ffff880100003bc0] bad_area_nosemaphore at ffffffff81051c23
#6 [ffff880100003bd0] __do_page_fault at ffffffff8105231c
#7 [ffff880100003cf0] do_page_fault at ffffffff8154dc8e
#8 [ffff880100003d20] page_fault at ffffffff8154af95
[exception RIP: unknown or invalid address]
RIP: 0000000000000002  RSP: ffff880100003dd8  RFLAGS: 00010202
RAX: ffffffffa0465a80  RBX: ffff8801bc7da200  RCX: ffff8801bc7da2a8
RDX: 0000000000000002  RSI: 00000000ffffffff  RDI: ffff8801bc7da200
RBP: ffff880100003e20   R8: ffffffff81ad12d8   R9: fe2582cc8764a601
R10: 0000000000000001  R11: 0000000000000000  R12: 0000000000000000
R13: ffff8801bc7da248  R14: ffff8801bc7da290  R15: 00000000ffffffff
ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018
#9 [ffff880100003dd8] fscache_object_slow_work_execute at ffffffffa0460e9f [fscache]
#10 [ffff880100003e28] slow_work_execute at ffffffff81121363
#11 [ffff880100003e68] slow_work_thread at ffffffff81121645
#12 [ffff880100003ee8] kthread at ffffffff810a662e
#13 [ffff880100003f48] kernel_thread at ffffffff8100c28a

クラッシュログ:

BUG: unable to handle kernel NULL pointer dereference at 0000000000000002
IP: [<0000000000000002>] 0x2
PGD 0 
Oops: 0010 [#1] SMP 
last sysfs file: /sys/devices/system/cpu/online
CPU 7 
Modules linked in: nfs nfsd lockd nfs_acl auth_rpcgss sunrpc 8021q garp stp llc cpufreq_ondemand freq_table pcc_cpufreq cachefiles fscache(T) ipv6 ipt_REJECT nf_conntrack_ipv4 nf_defrag_ipv4 xt_state nf_conntrack iptable_filter ip_tables xfs exportfs ext2 power_meter acpi_ipmi ipmi_si ipmi_msghandler microcode iTCO_wdt iTCO_vendor_support hpilo hpwdt igb i2c_algo_bit i2c_core ptp pps_core sg serio_raw lpc_ich mfd_core ioatdma dca shpchp ext4 jbd2 mbcache sd_mod crc_t10dif hpsa ahci dm_mirror dm_region_hash dm_log dm_mod [last unloaded: scsi_wait_scan]

Pid: 42993, comm: kslowd002 Tainted: G           -- ------------  T 2.6.32-642.1.1.el6.x86_64 #1 HP ProLiant DL360e Gen8
RIP: 0010:[<0000000000000002>]  [<0000000000000002>] 0x2
RSP: 0018:ffff880100003dd8  EFLAGS: 00010202
RAX: ffffffffa0465a80 RBX: ffff8801bc7da200 RCX: ffff8801bc7da2a8
RDX: 0000000000000002 RSI: 00000000ffffffff RDI: ffff8801bc7da200
RBP: ffff880100003e20 R08: ffffffff81ad12d8 R09: fe2582cc8764a601
R10: 0000000000000001 R11: 0000000000000000 R12: 0000000000000000
R13: ffff8801bc7da248 R14: ffff8801bc7da290 R15: 00000000ffffffff
FS:  0000000000000000(0000) GS:ffff8800380e0000(0000) knlGS:0000000000000000
CS:  0010 DS: 0018 ES: 0018 CR0: 000000008005003b
CR2: 0000000000000002 CR3: 0000000001a8d000 CR4: 00000000000407e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Process kslowd002 (pid: 42993, threadinfo ffff880100000000, task ffff88040d88d520)
Stack:
 ffffffffa0460e9f ffff880100003e00 ffff8801bc7da238 ffff8801bc7da298
<d> 0000000000000002 ffffffff81f55ec0 ffff8801bc7da290 ffff8801bc7da298
<d> 0000000000000001 ffff880100003e60 ffffffff81121363 ffff880100003e60
Call Trace:
 [<ffffffffa0460e9f>] ? fscache_object_slow_work_execute+0xaf/0x1c0 [fscache]
 [<ffffffff81121363>] slow_work_execute+0x233/0x310
 [<ffffffff81121645>] slow_work_thread+0x205/0x360
 [<ffffffff810a6ac0>] ? autoremove_wake_function+0x0/0x40
 [<ffffffff81121440>] ? slow_work_thread+0x0/0x360
 [<ffffffff810a662e>] kthread+0x9e/0xc0
 [<ffffffff8100c28a>] child_rip+0xa/0x20
 [<ffffffff810a6590>] ? kthread+0x0/0xc0
 [<ffffffff8100c280>] ? child_rip+0x0/0x20
Code:  Bad RIP value.
RIP  [<0000000000000002>] 0x2
 RSP <ffff880100003dd8>
CR2: 0000000000000002

誰かがクラッシュの原因を理解していますか?問題の診断に役立つプログラムがあれば、私はそれらを聞くことにオープンです。

4
PolkaRon

簡単な回答:

これは カーネルバグ#13998 に関連しているように見えます(この結論に至った方法については、以下を参照してください)。これは、以降のカーネルバージョンでは再現されていません。この場合は、新しいカーネル(またはCentOSの新しいバージョン、同じ違い)にアップグレードすると、fscacheモジュールに関連する問題を解決する必要があります

問題であるfscacheの手がかり:

PANIC: "BUG: unable to handle kernel NULL pointer dereference at 000000000000002"

カーネルが意味のないメモリアドレスをロードしようとしたことを意味します。

COMMAND: "kslowd002"

これは、パニックが発生したときにカーネルが実行しようとしていたコマンドです。これは必ずしもこれがクラッシュの原因となったコマンドであったことを意味するわけではありませんが、開始するのに適しています。 kslowdとは何ですか?それについて読んでください ここ

バックトレースで:

#9 [ffff880100003dd8] fscache_object_slow_work_execute at ffffffffa0460e9f [fscache]

前に実行される最後のプロシージャです。

[exception RIP: unknown or invalid address]

これは、カーネルが逆参照できなかったNULLポインタです。つまり、カーネルがメモリを調べようとしたが、存在しないためにできなかった場所です。これはfscacheの既知のバグであり、明らかにそれ以降のバージョンのカーネルで解決されました。

ここ は、解決されなかった同じ問題に対するCentOS-6固有のバグレポート(#0007782)です。 CentOSからの推奨事項は、カーネルが利用可能な最新バージョンであることを確認することでもあります。この場合、CentOSの次の安定したメジャーリリースへのアップグレードが必要になる可能性があります。

これらのクラッシュダンプの詳細については、このチュートリアルを強くお勧めします。 http://www.dedoimedo.com/computers/crash-analyze.html

3
Josh Benson