41.11. コアダンプの分析
システムクラッシュの原因を確認するには、crash
ユーティリティーを使用します。これにより、GNU Debugger (GDB) に似たインタラクティブなプロンプトが提供されます。crash
を使用すると、kdump
、netdump
、diskdump
、または xendump
によって作成されたコアダンプと実行中の Linux システムを分析できます。あるいは、Kernel Oops Analyzer または Kdump Helper ツールを使用することもできます。
41.11.1. crash ユーティリティーのインストール
crash ユーティリティーをインストールするために必要なパッケージと手順を説明します。crash
ユーティリティーは、デフォルトでは Red Hat Enterprise Linux 8 システムにインストールされない可能性があります。crash
は、システムの実行中、またはカーネルクラッシュが発生してコアダンプファイルが作成された後に、システムの状態を対話的に分析するツールです。コアダンプファイルは、vmcore
ファイルとも呼ばれます。
手順
関連するリポジトリーを有効にします。
# subscription-manager repos --enable baseos repository
# subscription-manager repos --enable appstream repository
# subscription-manager repos --enable rhel-8-for-x86_64-baseos-debug-rpms
crash
パッケージをインストールします。# yum install crash
kernel-debuginfo
パッケージをインストールします。# yum install kernel-debuginfo
パッケージ
kernel-debuginfo
は実行中のカーネルに対応し、ダンプ分析に必要なデータを提供します。
41.11.2. crash ユーティリティーの実行および終了
crash
ユーティリティーは、kdump
を分析するための強力なツールです。クラッシュダンプファイルに対して crash
を実行すると、クラッシュ時のシステムの状態を把握し、問題の根本原因を特定し、カーネル関連の問題をトラブルシューティングできます。
前提条件
-
現在実行しているカーネルを特定します (
4.18.0-5.el8.x86_64
など)。
手順
crash
ユーティリティーを起動するには、次の 2 つの必要なパラメーターを渡します。-
debug-info (圧縮解除された vmlinuz イメージ) (特定の
kernel-debuginfo
パッケージに含まれる/usr/lib/debug/lib/modules/4.18.0-5.el8.x86_64/vmlinux
など) 実際の vmcore ファイル (例:
/var/crash/127.0.0.1-2018-10-06-14:05:33/vmcore
)結果として生じる
crash
コマンドは次のようになります。# crash /usr/lib/debug/lib/modules/4.18.0-5.el8.x86_64/vmlinux /var/crash/127.0.0.1-2018-10-06-14:05:33/vmcore
kdump
で取得したのと同じ <kernel> のバージョンを使用します。例41.1 crash ユーティリティーの実行
以下の例は、4.18.0-5.el8.x86_64 カーネルを使用して、2018 年 10 月 6 日 (14:05 PM) に作成されたコアダンプの分析を示しています。
... WARNING: kernel relocated [202MB]: patching 90160 gdb minimal_symbol values KERNEL: /usr/lib/debug/lib/modules/4.18.0-5.el8.x86_64/vmlinux DUMPFILE: /var/crash/127.0.0.1-2018-10-06-14:05:33/vmcore [PARTIAL DUMP] CPUS: 2 DATE: Sat Oct 6 14:05:16 2018 UPTIME: 01:03:57 LOAD AVERAGE: 0.00, 0.00, 0.00 TASKS: 586 NODENAME: localhost.localdomain RELEASE: 4.18.0-5.el8.x86_64 VERSION: #1 SMP Wed Aug 29 11:51:55 UTC 2018 MACHINE: x86_64 (2904 Mhz) MEMORY: 2.9 GB PANIC: "sysrq: SysRq : Trigger a crash" PID: 10635 COMMAND: "bash" TASK: ffff8d6c84271800 [THREAD_INFO: ffff8d6c84271800] CPU: 1 STATE: TASK_RUNNING (SYSRQ) crash>
-
debug-info (圧縮解除された vmlinuz イメージ) (特定の
対話型プロンプトを終了して
crash
を停止するには、exit
またはq
と入力します。crash> exit ~]#
crash
コマンドは、ライブシステムをデバッグするための強力なツールとして利用することもできます。ただし、システムレベルの問題を回避するために注意して使用する必要があります。
関連情報
41.11.3. crash ユーティリティーのさまざまなインジケーターの表示
crash
ユーティリティーを使用して、カーネルメッセージバッファー、バックトレース、プロセスステータス、仮想メモリー情報、開いているファイルなど、さまざまなインジケータを表示します。
メッセージバッファーの表示
カーネルメッセージバッファーを表示するには、対話式プロンプトで
log
コマンドを入力します。crash> log ... several lines omitted ... EIP: 0060:[<c068124f>] EFLAGS: 00010096 CPU: 2 EIP is at sysrq_handle_crash+0xf/0x20 EAX: 00000063 EBX: 00000063 ECX: c09e1c8c EDX: 00000000 ESI: c0a09ca0 EDI: 00000286 EBP: 00000000 ESP: ef4dbf24 DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 Process bash (pid: 5591, ti=ef4da000 task=f196d560 task.ti=ef4da000) Stack: c068146b c0960891 c0968653 00000003 00000000 00000002 efade5c0 c06814d0 <0> fffffffb c068150f b7776000 f2600c40 c0569ec4 ef4dbf9c 00000002 b7776000 <0> efade5c0 00000002 b7776000 c0569e60 c051de50 ef4dbf9c f196d560 ef4dbfb4 Call Trace: [<c068146b>] ? __handle_sysrq+0xfb/0x160 [<c06814d0>] ? write_sysrq_trigger+0x0/0x50 [<c068150f>] ? write_sysrq_trigger+0x3f/0x50 [<c0569ec4>] ? proc_reg_write+0x64/0xa0 [<c0569e60>] ? proc_reg_write+0x0/0xa0 [<c051de50>] ? vfs_write+0xa0/0x190 [<c051e8d1>] ? sys_write+0x41/0x70 [<c0409adc>] ? syscall_call+0x7/0xb Code: a0 c0 01 0f b6 41 03 19 d2 f7 d2 83 e2 03 83 e0 cf c1 e2 04 09 d0 88 41 03 f3 c3 90 c7 05 c8 1b 9e c0 01 00 00 00 0f ae f8 89 f6 <c6> 05 00 00 00 00 01 c3 89 f6 8d bc 27 00 00 00 00 8d 50 d0 83 EIP: [<c068124f>] sysrq_handle_crash+0xf/0x20 SS:ESP 0068:ef4dbf24 CR2: 0000000000000000
このコマンドの使用方法の詳細を参照するには、
help log
と入力してください。注記カーネルメッセージバッファーには、システムクラッシュに関する最も重要な情報が含まれています。カーネルメッセージバッファーは、常に最初に
vmcore-dmesg.txt
ファイルにダンプされます。たとえば、ターゲットロケーションに十分なスペースがないために完全なvmcore
ファイルを取得できなかった場合は、カーネルメッセージバッファーから必要な情報を取得できます。デフォルトでは、vmcore-dmesg.txt
は/var/crash/
ディレクトリーに格納されます。
バックトレースの表示
カーネルスタックトレースを表示するには、
bt
コマンドを使用します。crash> bt PID: 5591 TASK: f196d560 CPU: 2 COMMAND: "bash" #0 [ef4dbdcc] crash_kexec at c0494922 #1 [ef4dbe20] oops_end at c080e402 #2 [ef4dbe34] no_context at c043089d #3 [ef4dbe58] bad_area at c0430b26 #4 [ef4dbe6c] do_page_fault at c080fb9b #5 [ef4dbee4] error_code (via page_fault) at c080d809 EAX: 00000063 EBX: 00000063 ECX: c09e1c8c EDX: 00000000 EBP: 00000000 DS: 007b ESI: c0a09ca0 ES: 007b EDI: 00000286 GS: 00e0 CS: 0060 EIP: c068124f ERR: ffffffff EFLAGS: 00010096 #6 [ef4dbf18] sysrq_handle_crash at c068124f #7 [ef4dbf24] __handle_sysrq at c0681469 #8 [ef4dbf48] write_sysrq_trigger at c068150a #9 [ef4dbf54] proc_reg_write at c0569ec2 #10 [ef4dbf74] vfs_write at c051de4e #11 [ef4dbf94] sys_write at c051e8cc #12 [ef4dbfb0] system_call at c0409ad5 EAX: ffffffda EBX: 00000001 ECX: b7776000 EDX: 00000002 DS: 007b ESI: 00000002 ES: 007b EDI: b7776000 SS: 007b ESP: bfcb2088 EBP: bfcb20b4 GS: 0033 CS: 0073 EIP: 00edc416 ERR: 00000004 EFLAGS: 00000246
bt <pid>
を入力して特定のプロセスのバックトレースを表示するか、help bt
を実行して、bt
の使用の詳細を表示します。
プロセスの状態表示
システム内のプロセスの状態を表示するには、
ps
コマンドを使用します。crash> ps PID PPID CPU TASK ST %MEM VSZ RSS COMM > 0 0 0 c09dc560 RU 0.0 0 0 [swapper] > 0 0 1 f7072030 RU 0.0 0 0 [swapper] 0 0 2 f70a3a90 RU 0.0 0 0 [swapper] > 0 0 3 f70ac560 RU 0.0 0 0 [swapper] 1 0 1 f705ba90 IN 0.0 2828 1424 init ... several lines omitted ... 5566 1 1 f2592560 IN 0.0 12876 784 auditd 5567 1 2 ef427560 IN 0.0 12876 784 auditd 5587 5132 0 f196d030 IN 0.0 11064 3184 sshd > 5591 5587 2 f196d560 RU 0.0 5084 1648 bash
ps <pid>
を使用して、単一プロセスのステータスを表示します。ps
の詳細な使用方法は、help ps を使用します。
仮想メモリー情報の表示
基本的な仮想メモリー情報を表示するには、対話式プロンプトで
vm
コマンドを入力します。crash> vm PID: 5591 TASK: f196d560 CPU: 2 COMMAND: "bash" MM PGD RSS TOTAL_VM f19b5900 ef9c6000 1648k 5084k VMA START END FLAGS FILE f1bb0310 242000 260000 8000875 /lib/ld-2.12.so f26af0b8 260000 261000 8100871 /lib/ld-2.12.so efbc275c 261000 262000 8100873 /lib/ld-2.12.so efbc2a18 268000 3ed000 8000075 /lib/libc-2.12.so efbc23d8 3ed000 3ee000 8000070 /lib/libc-2.12.so efbc2888 3ee000 3f0000 8100071 /lib/libc-2.12.so efbc2cd4 3f0000 3f1000 8100073 /lib/libc-2.12.so efbc243c 3f1000 3f4000 100073 efbc28ec 3f6000 3f9000 8000075 /lib/libdl-2.12.so efbc2568 3f9000 3fa000 8100071 /lib/libdl-2.12.so efbc2f2c 3fa000 3fb000 8100073 /lib/libdl-2.12.so f26af888 7e6000 7fc000 8000075 /lib/libtinfo.so.5.7 f26aff2c 7fc000 7ff000 8100073 /lib/libtinfo.so.5.7 efbc211c d83000 d8f000 8000075 /lib/libnss_files-2.12.so efbc2504 d8f000 d90000 8100071 /lib/libnss_files-2.12.so efbc2950 d90000 d91000 8100073 /lib/libnss_files-2.12.so f26afe00 edc000 edd000 4040075 f1bb0a18 8047000 8118000 8001875 /bin/bash f1bb01e4 8118000 811d000 8101873 /bin/bash f1bb0c70 811d000 8122000 100073 f26afae0 9fd9000 9ffa000 100073 ... several lines omitted ...
vm <pid>
を実行して、1 つのプロセスの情報を表示するか、help vm
を実行して、vm
の使用方法を表示します。
オープンファイルの表示
オープンファイルの情報を表示するには、
files
コマンドを実行します。crash> files PID: 5591 TASK: f196d560 CPU: 2 COMMAND: "bash" ROOT: / CWD: /root FD FILE DENTRY INODE TYPE PATH 0 f734f640 eedc2c6c eecd6048 CHR /pts/0 1 efade5c0 eee14090 f00431d4 REG /proc/sysrq-trigger 2 f734f640 eedc2c6c eecd6048 CHR /pts/0 10 f734f640 eedc2c6c eecd6048 CHR /pts/0 255 f734f640 eedc2c6c eecd6048 CHR /pts/0
files <pid>
を実行して、選択した 1 つのプロセスによって開かれたファイルを表示するか、help files
を実行して、files
の使用方法を表示します。
41.11.4. Kernel Oops Analyzer の使用
Kernel Oops Analyzer ツールは、ナレッジベースの既知の問題と oops
メッセージを比較することで、クラッシュダンプを分析します。
前提条件
-
oops
メッセージは、Kernel Oops Analyzer にフィードするために保護されています。
手順
- Kernel Oops Analyzer ツールにアクセスします。
カーネルクラッシュの問題を診断するには、
vmcore
に生成されたカーネルの oops ログをアップロードします。-
あるいは、テキストメッセージまたは
vmcore-dmesg.txt
を入力として提供することで、カーネルクラッシュの問題を診断することもできます。
-
あるいは、テキストメッセージまたは
-
DETECT
をクリックして、makedumpfile
からの情報に基づくoops
メッセージを既知のソリューションと比較します。
関連情報
41.11.5. Kdump Helper ツール
Kdump ヘルパーツールは、提供された情報を使用して kdump
を設定するのに役立ちます。Kdump Helper は、ユーザーの設定に基づいて設定スクリプトを生成します。サーバーでスクリプトを開始して実行すると、kdump
サービスが設定されます。
関連情報