Kdump は、システム クラッシュが発生した場合にシステム コア ダンプをキャプチャするために使用されるユーティリティです。
これらのキャプチャされたコア ダンプを後で使用して、システム障害の正確な原因を分析し、将来のクラッシュを防ぐために必要な修正を実装できます。
Kdump は、crashkernel と呼ばれるセカンダリ カーネル用にメモリのごく一部を予約します。
このセカンダリ カーネルまたはクラッシュ カーネルは、システムがクラッシュするたびにコア ダンプ イメージをキャプチャするために使用されます。
1. Kdump ツールをインストール
まず、kexec-tools パッケージの一部である kdump をインストールします。
# yum install kexec-tools
2. grub.conf に crashkernel を設定
パッケージをインストールしたら、/boot/grub/grub.conf ファイルを編集して、kdump クラッシュ カーネル用に予約するメモリ量を設定します。
値 crashkernel の /boot/grub/grub.conf を編集して、auto またはユーザー指定の値に設定できます。 2G 以上のメモリを搭載したマシンでは、最低でも 128M を使用することをお勧めします。
次の例では、「kernel」で始まる行を探します。ここでは、「crashkernel=auto」に設定されています。
# vi /boot/grub/grub.conf default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux (2.6.32-419.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-419.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-419.el6.x86_64.img
3.ダンプの場所を構成
カーネルがクラッシュすると、/etc/kdump.conf で定義された設定に基づいて、ローカル ファイルシステムまたはリモート ファイルシステム (NFS) にコア ダンプをキャプチャできます (SLES オペレーティング システムでは、パスは /etc/sysconfig/kdump です)。
このファイルは、kexec-tools パッケージのインストール時に自動的に作成されます。
このファイルのすべてのエントリは、デフォルトでコメント アウトされます。最適なオプションに必要なもののコメントを外すことができます。
# vi /etc/kdump.conf #raw /dev/sda5 #ext4 /dev/sda3 #ext4 LABEL=/boot #ext4 UUID=03138356-5e61-4ab3-b58e-27507ac41937 #net my.server.com:/export/tmp #net [email protected] path /var/crash core_collector makedumpfile -c --message-level 1 -d 31 #core_collector scp #core_collector cp --sparse=always #extra_bins /bin/cp #link_delay 60 #kdump_post /var/crash/scripts/kdump-post.sh #extra_bins /usr/bin/lftp #disk_timeout 30 #extra_modules gfs2 #options modulename options #default shell #debug_mem_level 0 #force_rebuild 1 #sshkey /root/.ssh/kdump_id_rsa
上記のファイル内:
- ダンプを raw デバイスに書き込むには、「raw /dev/sda5」のコメントを解除し、正しいダンプの場所を指すように変更します。
- ダンプの場所のパスを変更する場合は、コメントを外して「path /var/crash」を新しい場所を指すように変更してください。
- NFS の場合、「#net my.server.com:/export/tmp」のコメントを外して、現在の NFS サーバーの場所を指定できます。
4.コア コレクターの構成
次のステップは、Kdump 構成ファイルでコア コレクターを構成することです。キャプチャしたデータを圧縮し、キャプチャしたコア ファイルから不要な情報をすべてフィルタリングすることが重要です。
コア コレクターを有効にするには、core_collector で始まる次の行のコメントを外します。
core_collector makedumpfile -c --message-level 1 -d 31
- core_collector で指定された makedumpfile は、実際にはデータを圧縮して小さな DUMPFILE を作成します。
- makedumpfile は 2 つの DUMPFILE 形式 (ELF 形式と kdump 圧縮形式) を提供します。
- デフォルトでは、makedumpfile は kdump 圧縮形式で DUMPFILE を作成します。
- kdump で圧縮された形式は、クラッシュ ユーティリティでのみ読み取ることができ、圧縮がサポートされているため、ELF 形式よりも小さくすることができます。
- ELF 形式は、GDB およびクラッシュ ユーティリティで読み取り可能です。
- -c はダンプデータをページごとに圧縮します
- -d は不要で無視できるページ数です。
行 #default shell のコメントを外すと、kdump がコアの収集に失敗した場合にシェルが呼び出されます。その後、管理者は makedumpfile コマンドを使用してコア ダンプを手動で取得できます。
5. kdump サービスを再起動
kdump を設定したら、kdump サービスを再起動します。
# service kdump restart Stopping kdump: [ OK ] Starting kdump: [ OK ] # service kdump status Kdump is operational
サービスの開始に問題がある場合は、kdump モジュールまたは crashkernel パラメータが正しく設定されていません。そのため、/proc/cmdline を検証し、crashkernel 値が含まれるように反映されていることを確認してください。
6.コア ダンプを手動でトリガーする
次のコマンドを使用して、コア ダンプを手動でトリガーできます:
echo 1 > /proc/sys/kernel/sysrq echo c > /proc/sysrq-trigger
サーバーは自動的に再起動し、クラッシュ ダンプが生成されます。
7.コア ファイルを表示
サーバーが再起動すると、コア ファイルが /var/crash で定義された場所に基づいて /var/crash の下に生成されます。
vmcore と vmcore-dmseg.txt ファイルが表示されます:
# ls -lR /var/crash drwxr-xr-x. 2 root root 4096 Mar 26 11:06 127.0.0.1-2014-03-26-11:06:43 /var/crash/127.0.0.1-2014-03-26-11:06:43: -rw-------. 1 root root 33595159 Mar 26 11:06 vmcore -rw-r--r--. 1 root root 79498 Mar 26 11:06 vmcore-dmesg.txt
8.クラッシュを使用した Kdump 分析
クラッシュ ユーティリティは、kdump によってキャプチャされたコア ファイルを分析するために使用されます。
また、netdump、diskdump、xendump などの他のダンプ ユーティリティによって作成されたコア ファイルの分析にも使用できます。
「kernel-debuginfo」パッケージが存在し、カーネルと同じレベルにあることを確認する必要があります。
以下に示すように、クラッシュ ツールを起動します。このコマンドを実行すると、クラッシュ コマンドを実行できるキャッシュ プロンプトが表示されます。
# crash /var/crash/127.0.0.1-2014-03-26-12\:24\:39/vmcore /usr/lib/debug/lib/modules/`uname –r`/vmlinux crash>
9.システムがクラッシュしたときのプロセスを見る
クラッシュ プロンプトで ps コマンドを実行すると、システムがクラッシュしたときに実行中のすべてのプロセスが表示されます。
crash> ps PID PPID CPU TASK ST %MEM VSZ RSS COMM 0 0 0 ffffffff81a8d020 RU 0.0 0 0 [swapper] 1 0 0 ffff88013e7db500 IN 0.0 19356 1544 init 2 0 0 ffff88013e7daaa0 IN 0.0 0 0 [kthreadd] 3 2 0 ffff88013e7da040 IN 0.0 0 0 [migration/0] 4 2 0 ffff88013e7e9540 IN 0.0 0 0 [ksoftirqd/0] 7 2 0 ffff88013dc19500 IN 0.0 0 0 [events/0]
10.システムクラッシュ時にスワップスペースを表示
クラッシュ プロンプトで swap コマンドを実行すると、システムがクラッシュしたときのスワップ領域の使用状況が表示されます。
crash> swap FILENAME TYPE SIZE USED PCT PRIORITY /dm-1 PARTITION 2064376k 0k 0% -1
11.システム クラッシュ時に IPCS を表示
クラッシュ プロンプトで ipcs コマンドを実行すると、システムがクラッシュしたときの共有メモリの使用状況が表示されます。
crash> ipcs SHMID_KERNEL KEY SHMID UID PERMS BYTES NATTCH STATUS (none allocated) SEM_ARRAY KEY SEMID UID PERMS NSEMS ffff8801394c0990 00000000 0 0 600 1 ffff880138f09bd0 00000000 65537 0 600 1 MSG_QUEUE KEY MSQID UID PERMS USED-BYTES MESSAGES (none allocated)
12.システムがクラッシュしたときに IRQ を表示
クラッシュ プロンプトで irq コマンドを実行すると、システムがクラッシュしたときの IRQ 統計が表示されます。
crash> irq -s CPU0 0: 149 IO-APIC-edge timer 1: 453 IO-APIC-edge i8042 7: 0 IO-APIC-edge parport0 8: 0 IO-APIC-edge rtc0 9: 0 IO-APIC-fasteoi acpi 12: 111 IO-APIC-edge i8042 14: 108 IO-APIC-edge ata_piix . .
vtop – このコマンドは、ユーザーまたはカーネルの仮想アドレスを物理アドレスに変換します。
foreach – このコマンドは、システム内の複数のタスクのデータを表示します
waitq – このコマンドは、待機キューにキューイングされたすべてのタスクを表示します。
13.システムがクラッシュしたときに仮想メモリを表示する
クラッシュ プロンプトで vm コマンドを実行すると、システムがクラッシュしたときの仮想メモリの使用状況が表示されます。
crash> vm PID: 5210 TASK: ffff8801396f6aa0 CPU: 0 COMMAND: "bash" MM PGD RSS TOTAL_VM ffff88013975d880 ffff88013a0c5000 1808k 108340k VMA START END FLAGS FILE ffff88013a0c4ed0 400000 4d4000 8001875 /bin/bash ffff88013cd63210 3804800000 3804820000 8000875 /lib64/ld-2.12.so ffff880138cf8ed0 3804c00000 3804c02000 8000075 /lib64/libdl-2.12.so
14.システムがクラッシュしたときに開いているファイルを表示する
クラッシュ プロンプトで files コマンドを実行すると、システムがクラッシュしたときに開いているファイルが表示されます。
crash> files PID: 5210 TASK: ffff8801396f6aa0 CPU: 0 COMMAND: "bash" ROOT: / CWD: /root FD FILE DENTRY INODE TYPE PATH 0 ffff88013cf76d40 ffff88013a836480 ffff880139b70d48 CHR /tty1 1 ffff88013c4a5d80 ffff88013c90a440 ffff880135992308 REG /proc/sysrq-trigger 255 ffff88013cf76d40 ffff88013a836480 ffff880139b70d48 CHR /tty1 ..
15.システムがクラッシュしたときにシステム情報を表示する
クラッシュ プロンプトで sys コマンドを実行すると、システムがクラッシュしたときにシステム情報が表示されます。
crash> sys KERNEL: /usr/lib/debug/lib/modules/2.6.32-431.5.1.el6.x86_64/vmlinux DUMPFILE: /var/crash/127.0.0.1-2014-03-26-12:24:39/vmcore [PARTIAL DUMP] CPUS: 1 DATE: Wed Mar 26 12:24:36 2014 UPTIME: 00:01:32 LOAD AVERAGE: 0.17, 0.09, 0.03 TASKS: 159 NODENAME: elserver1.abc.com RELEASE: 2.6.32-431.5.1.el6.x86_64 VERSION: #1 SMP Fri Jan 10 14:46:43 EST 2014 MACHINE: x86_64 (2132 Mhz) MEMORY: 4 GB PANIC: "Oops: 0002 [#1] SMP " (check log for details)