RHEL8运行程序时内核崩溃,如何定位报错代码行?
内核崩溃故障分析与排查建议
问题描述
我对内核了解不多,不知道怎么排查故障。系统发生内核崩溃,以下是vmcore-dmesg.txt日志内容:
dmesg日志(已翻译)
[ 378.442884] SPDMD-LUN:[错误]lun_del:2218 设备 nvfile-mgmtd-0 正忙 :2 [ 424.511211] XFS (nvfile-storage-0): 挂载V5文件系统 [ 424.513045] XFS (nvfile-storage-2): 挂载V5文件系统 [ 424.538953] XFS (nvfile-storage-2): 开始恢复(日志设备:内部) [ 424.546536] XFS (nvfile-storage-2): 结束恢复(日志设备:内部) [ 425.512217] XFS (nvfile-storage-0): 开始恢复(日志设备:内部) [ 425.518929] XFS (nvfile-storage-1): 挂载V5文件系统 [ 425.520813] XFS (nvfile-storage-3): 挂载V5文件系统 [ 426.288987] XFS (nvfile-storage-3): 开始恢复(日志设备:内部) [ 426.475465] XFS (nvfile-storage-1): 开始恢复(日志设备:内部) [ 427.496551] XFS (nvfile-storage-0): 结束恢复(日志设备:内部) [ 428.320932] XFS (nvfile-storage-3): 结束恢复(日志设备:内部) [ 428.977479] XFS (nvfile-storage-1): 结束恢复(日志设备:内部) [ 445.927118] 错误:无法处理内核空指针解引用,地址 0000000000000008 [ 445.927685] PGD 0 P4D 0 [ 445.928216] Oops: 0000 [#1] SMP NOPTI [ 445.928723] CPU: 4 PID: 591 进程名: kworker/u193:1 Kdump已加载 污点标记: G OE --------- - - 4.18.0-305.el8.x86_64 #1 [ 445.929735] 硬件信息: Lenovo ThinkSystem SR860 V2/7Z60CTO1WW, BIOS M5E118K-1.52 08/06/2021 [ 445.930305] 工作队列: xfs-cil/nvfile-storage- xlog_cil_push_work [xfs] [ 445.930910] RIP: 0010:blk_queue_split+0x1c6/0x660 [ 445.933048] 代码: c0 45 31 f6 89 44 24 44 89 7c 24 40 31 ff 85 db 0f 84 56 04 00 00 8b 44 24 44 48 89 c1 48 89 44 24 30 48 c1 e1 04 49 03 4d 78 <8b> 41 08 8b 71 0c 48 8b 11 44 29 f8 39 d8 48 89 54 24 48 0f 47 c3 [ 445.936323] RSP: 0018:ffffbcbf9a4bfaf8 EFLAGS: 00010246 [ 445.936711] RAX: 0000000000000000 RBX: 0000000000003000 RCX: 0000000000000000 [ 445.937028] RDX: 0000000000000018 RSI: 0000000000000018 RDI: 0000000000000000 [ 445.937343] RBP: ffffbcbf9a4bfb90 R08: 0000000000000000 R09: ffff940c1965d700 [ 445.937659] R10: 0000000000000000 R11: 0000000000000000 R12: ffff94ca6f590000 [ 445.937979] R13: ffff940bda0ddc80 R14: 0000000000000000 R15: 0000000000000000 [ 445.938304] FS: 0000000000000000(0000) GS:ffff940effd00000(0000) knlGS:0000000000000000
故障核心分析
- 崩溃根源:内核空指针解引用,发生在
blk_queue_split+0x1c6/0x660函数中,代码尝试访问地址0x8的内容,但对应的指针为NULL。 - 触发路径:由XFS文件系统的
xlog_cil_push_work工作队列触发,该进程负责XFS日志提交,结合之前的XFS挂载、恢复操作,推测和nvfile系列存储设备的IO处理逻辑相关。 - 前置异常:崩溃前出现
SPDMD-LUN错误,提示nvfile-mgmtd-0设备在删除LUN时处于忙状态,这可能是设备状态异常的信号,进而引发后续IO处理出错。
排查与修复步骤
- 升级内核补丁:当前内核版本为4.18.0-305.el8.x86_64,查询该版本是否存在XFS或块设备相关的空指针解引用已知BUG,优先升级到同分支的最新稳定内核版本。
- 检查存储设备状态:查看nvfile-mgmtd服务的运行日志,确认是否存在设备连接异常、IO超时等问题;用
smartctl工具检测NVMe硬件是否存在故障。 - 修复XFS文件系统:系统恢复后,对所有nvfile-storage-X分区执行
xfs_repair命令,排查并修复文件系统损坏问题。 - 完整内核崩溃分析:配置kdump收集完整vmcore文件,使用
crash工具加载vmcore和对应内核调试包,分析完整调用链,定位具体为空的指针及触发逻辑。
内容的提问来源于stack exchange,提问作者Lemon
相关产品推荐
相关产品推荐

