OSが突然死するとログに手掛かりとなるような出力(判断材料)が意外な程なく、途方にくれる事が多いのですが、その対策としてダンプをはかせてみようというのが今回の内容です。
※評価は、CentOS6.5(x86_64)でメモリ2GBを搭載したマシンで行っています
クラッシュダンプを取得する為のセットアップ
CentOS6.5でクラッシュダンプを取得するには、kdumpサービスを利用します。
以下、その手順です。
1. 必要なパッケージのインストール
kdumpサービスを利用するには、kexec-toolsがインストールされている必要があります。
# yum install kexec-tools
2. メモリー使用量の設定
クラッシュダンプ用に割り当てるメモリ容量を設定します。
→通常、起動しているOSからはそのメモリ領域はないものとして扱われます(※下記の(備考)参照)
設定は、grub.confのkernelの行に”crashkernel”パラメータを渡すことで行いますが、
通常、最初から”crashkernel=auto”と指定されていると思います。
※CentOS6.5では、2GB以上のメモリが搭載されていればkdumpサービスが有効になっていなくても、自動的にメモリの割り当てだけは行われています
※autoで割り当てられたメモリ容量は以下のいずれかのコマンドで確認できます
# cat /proc/cmdline
# cat /sys/kernel/kexec_crash_size
※2GB未満の場合は、自動的に割り当てられることはないので、autoの箇所に128Mとじかに指定する必要があります
title CentOS (2.6.32-431.5.1.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-431.5.1.el6.x86_64 <中略> crashkernel=auto
initrd /initramfs-2.6.32-431.5.1.el6.x86_64.img
(備考)====================================================
・2GBのメモリ搭載し、crashkernelの指定がない場合のメモリ容量
# cat /proc/meminfo
MemTotal: 2046588 kB
MemFree: 1867764 kB
Buffers: 7584 kB
・
・
・2GBのメモリを搭載し、crashkernel=autoの指定がある場合のメモリ容量
→2GBからクラッシュダンプ用に割り当てられたメモリ容量が差し引かれて表示されます
# cat /proc/meminfo
MemTotal: 1914492 kB
MemFree: 1733792 kB
Buffers: 7568 kB
MemTotal: 1914492 kB
MemFree: 1733792 kB
Buffers: 7568 kB
・
・
============================================================3. 設定ファイル /etc/kdump.confの編集
今回は、デフォルトのままで特に編集を行いませんでした。
4. kdumpサービスの起動と状態確認
# chkconfig kdump on
# /etc/rc.d/init.d/kdump start
No kdump initial ramdisk found. [WARNING]
Rebuilding /boot/initrd-2.6.32-431.1.2.0.1.el6.x86_64kdump.img
Starting kdump: [ OK ]
#
kdumpサービスが有効になったかは以下のコマンドで確認できます
# /etc/rc.d/init.d/kdump status
Kdump is operational
#
# cat /sys/kernel/kexec_crash_loaded
1
#
コアダンプの分析
コアダンプの分析を行うまでの手順は下記のようになります。
1. 必要なパッケージのインストール
→現在running中のkernelに合わせてインストールします
# yum --enablerepo=debug install kernel-debuginfo-`uname -r` crash
2. kernelクラッシュ
今回は、下記コマンドで強制的にkernelクラッシュを発生させます
これで下記のように/var/crashディレクトリ配下にコアダンプが吐かれます。
# echo c > /proc/sysrq-trigger
これで下記のように/var/crashディレクトリ配下にコアダンプが吐かれます。
# ll /var/crash/127.0.0.1-2014-03-17-17\:36\:44/
total 30292
-rw------- 1 root root 30929131 Mar 17 17:36 vmcore
-rw-r--r-- 1 root root 85835 Mar 17 17:36 vmcore-dmesg.txt
#
3. crashユーティリティの実行
# crash /usr/lib/debug/lib/modules/2.6.32-431.1.2.0.1.el6.x86_64/vmlinux \
> /var/crash/127.0.0.1-2014-03-17-17\:36\:44/vmcore
以下のようにプロンプトが戻っててきたら、各種コマンドで解析が実施できます。
→利用できるコマンドはhelpで確認できます
crash 6.1.0-5.el6
Copyright (C) 2002-2012 Red Hat, Inc.
Copyright (C) 2004, 2005, 2006, 2010 IBM Corporation
Copyright (C) 1999-2006 Hewlett-Packard Co
Copyright (C) 2005, 2006, 2011, 2012 Fujitsu Limited
Copyright (C) 2006, 2007 VA Linux Systems Japan K.K.
Copyright (C) 2005, 2011 NEC Corporation
Copyright (C) 1999, 2002, 2007 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 (GDB) 7.3.1
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu"...
KERNEL: /usr/lib/debug/lib/modules/2.6.32-431.1.2.0.1.el6.x86_64/vmlinux
DUMPFILE: /var/crash/127.0.0.1-2014-03-17-17:36:44/vmcore [PARTIAL DUMP]
CPUS: 1
DATE: Mon Mar 17 17:36:41 2014
UPTIME: 00:41:54
LOAD AVERAGE: 0.10, 0.17, 0.08
TASKS: 71
NODENAME: kdump.example.com
RELEASE: 2.6.32-431.1.2.0.1.el6.x86_64
VERSION: #1 SMP Fri Dec 13 13:06:13 UTC 2013
MACHINE: x86_64 (3192 Mhz)
MEMORY: 2 GB
PANIC: "Oops: 0002 [#1] SMP " (check log for details)
PID: 4289
COMMAND: "bash"
TASK: ffff880037c20ae0 [THREAD_INFO: ffff880037aea000]
CPU: 0
STATE: TASK_RUNNING (PANIC)
crash>
0 件のコメント:
コメントを投稿