Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
7.6. 코어 덤프 분석
시스템 충돌의 원인을 확인하려면 다음을 사용하십시오. crash GDB(GNU Debugger)와 매우 유사한 대화형 프롬프트를 제공하는 유틸리티. 이 유틸리티를 사용하면 netdump
,diskdump
,xendump
또는 kdump
로 생성된 코어 덤프뿐만 아니라 실행 중인 Linux 시스템을 대화형으로 분석할 수 있습니다.
7.6.1. 크래시 유틸리티 설치
설치 방법 crash 도구를 분석하고 쉘 프롬프트에서 루트로
다음 명령을 실행합니다.
yum install crash
기타 등등 (In addition to crash또한 설치해야합니다. kernel-debuginfo 덤프 분석에 필요한 데이터를 제공하는 실행 중인 커널에 해당하는 패키지입니다. 설치 방법 kernel-debuginfo debuginfo-install
명령을 root
로 사용합니다.
debuginfo-install kernel
Red Hat Enterprise Linux에 새 패키지를 설치하는 방법에 대한 자세한 내용은. Yum 패키지 관리자, 참조 Red Hat Enterprise Linux 7 System Administrator’s Guide.
7.6.2. 크래시 유틸리티 실행
유틸리티를 시작하려면 쉘 프롬프트에서 다음 양식에 명령을 입력합니다.
crash
/usr/lib/debug/lib/modules/<kernel>/vmlinux
\/var/crash/<timestamp>/vmcore
kdump
에서 캡처한 것과 동일한 & lt;kernel> 버전을 사용합니다. 현재 실행 중인 커널을 확인하려면 uname -r
명령을 사용합니다.
예 7.2. 크래시 유틸리티 실행
~]# crash /usr/lib/debug/lib/modules/2.6.32-69.el6.i686/vmlinux \ /var/crash/127.0.0.1-2010-08-25-08:45:02/vmcore crash 5.0.0-23.el6 Copyright (C) 2002-2010 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, 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.0 Copyright (C) 2009 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 "i686-pc-linux-gnu"... KERNEL: /usr/lib/debug/lib/modules/2.6.32-69.el6.i686/vmlinux DUMPFILE: /var/crash/127.0.0.1-2010-08-25-08:45:02/vmcore [PARTIAL DUMP] CPUS: 4 DATE: Wed Aug 25 08:44:47 2010 UPTIME: 00:09:02 LOAD AVERAGE: 0.00, 0.01, 0.00 TASKS: 140 NODENAME: hp-dl320g5-02.lab.bos.redhat.com RELEASE: 2.6.32-69.el6.i686 VERSION: #1 SMP Tue Aug 24 10:31:45 EDT 2010 MACHINE: i686 (2394 Mhz) MEMORY: 8 GB PANIC: "Oops: 0002 [#1] SMP " (check log for details) PID: 5591 COMMAND: "bash" TASK: f196d560 [THREAD_INFO: ef4da000] CPU: 2 STATE: TASK_RUNNING (PANIC) crash>
7.6.3. 메시지 버퍼 표시
커널 메시지 버퍼를 표시하려면 대화형 프롬프트에서 log
명령을 입력합니다.
예 7.3. 커널 메시지 버퍼 표시
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
명령 사용법에 대한 자세한 내용은 도움말 로그
를 입력합니다.
커널 메시지 버퍼에는 시스템 충돌에 대한 가장 중요한 정보가 포함되어 있으므로 항상 vmcore-dmesg.txt
파일에서 먼저 덤프됩니다. 이는 예를 들어 대상 위치의 공간이 부족하여 전체 vmcore
파일을 가져오려고 할 때 유용합니다. 기본적으로 vmcore-dmesg.txt
는 /var/crash/
디렉터리에 있습니다.
7.6.4. 역추적 표시
커널 스택 추적을 표시하려면 대화형 프롬프트에서 bt
명령을 입력합니다. bt < pid>
를 사용하여 단일 프로세스의 역추적을 표시할 수 있습니다.
예 7.4. 커널 스택 추적 표시
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
명령 사용법에 대한 자세한 내용은 help bt
를 입력합니다.
7.6.5. 프로세스 상태 표시
시스템의 프로세스 상태를 표시하려면 대화형 프롬프트에서 ps
명령을 입력합니다. ps < pid>
를 사용하여 단일 프로세스의 상태를 표시할 수 있습니다.
예 7.5. 시스템에 프로세스 상태 표시
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
명령 사용법에 대한 자세한 내용은 help ps
를 입력합니다.
7.6.6. 가상 메모리 정보 표시
기본 가상 메모리 정보를 표시하려면 대화형 프롬프트에서 vm
명령을 입력합니다. vm < pid>
를 사용하여 단일 프로세스에 정보를 표시할 수 있습니다.
예 7.6. 현재 컨텍스트의 가상 메모리 정보 표시
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 ...
명령 사용법에 대한 자세한 내용은 help vm
를 입력합니다.
7.6.7. 열려 있는 파일 표시
열려 있는 파일에 대한 정보를 표시하려면 대화형 프롬프트에서 files
명령을 입력합니다. < pid>파일을
사용하여 선택한 하나의 프로세스에서 열린 파일을 표시할 수 있습니다.
예 7.7. 현재 컨텍스트의 열려 있는 파일에 대한 정보 표시
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
명령 사용법에 대한 자세한 내용은 도움말 파일을
입력합니다.
7.6.8. 유틸리티 종료
대화형 프롬프트를 종료하고 종료합니다. crashexit
또는 q
를 입력합니다.
예 7.8. 크래시 유틸리티 종료
crash> exit ~]#