내 CentOS 6.8 서버가 며칠마다 충돌하는데 그 이유를 알아내려고 노력 중입니다. 커널 버전 2.6.32-642.1.1.el6.x86_64를 사용하고 있습니다. 지금까지 커널 패닉으로 인해 생성된 커널 덤프를 살펴보는 데 도움이 되는 크래시 프로그램을 설치했습니다. 하지만 솔직히 말해서 나는 그것이 출력하는 많은 정보를 잘 이해하지 못합니다.
[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
충돌 원인을 이해하는 사람이 있습니까? 문제를 진단하는 데 도움이 될 수 있는 프로그램이 있다면 그 프로그램의 의견을 듣고 싶습니다.
답변1
빠른 답변:
이것은 다음과 비슷해 보입니다.커널 버그 #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