0

0

Linux内核排错思路_系统异常定位方法解析【技巧】

冷漠man

冷漠man

发布时间:2026-01-08 19:30:11

|

923人浏览过

|

来源于php中文网

原创

dmesg是离真相最近的日志源,需结合-T时间戳、关键词过滤、上下文分析、kdump验证、软硬复位双钩子及soft lockup检测综合排查内核故障。

linux内核排错思路_系统异常定位方法解析【技巧】

看 dmesg 是第一反应,但得会筛、会定时、会关联

内核出问题,dmesg 是离真相最近的日志源——它不经过 syslog 守护进程,直接来自内核环形缓冲区,连 panic 前最后一行都可能留下。但盲目 dmesg 全量输出等于大海捞针。

  • 优先加时间戳和过滤:用 dmesg -T | grep -i "error\|warn\|fail\|panic\|oops"-T 把时间戳转成可读格式,避免对着 [ 12.345678] 猜时间
  • 注意复位后日志会清空(除非配置了 log_buf_len 或启用 ramoops),所以要尽早抓;若系统频繁重启,建议搭配 dmesg -T -w 实时监听
  • 关键线索常藏在上下文里:比如看到 blk_update_request: I/O error,别只盯这一行,往上翻 10 行,看是不是紧跟着 ata3.00: failed command: READ FPDMA QUEUED —— 这就指向 SATA 链路或硬盘固件问题,而非文件系统层
  • 有些错误默认不打印(如 soft lockup 检测被关闭),需确认内核配置:cat /proc/sys/kernel/softlockup_panic/proc/sys/kernel/hardlockup_panic,值为 1 才会触发 panic 并留下完整

kdump 不是“开了就行”,得验证捕获内核是否真能启动

kdump 是分析 kernel crash 的刚需手段,但很多现场配置完就以为万事大备,结果真 crash 时 /var/crash/ 下空空如也——问题往往出在捕获内核根本没起来。

  • 检查保留内存是否足够:cat /sys/kernel/kexec_crash_size,常见工控机或小内存设备(≤2G)容易因预留不足导致 kdump 失败,建议至少预留 256MB(通过 crashkernel=256M 内核参数)
  • 验证捕获流程是否通:手动触发一次 echo c > /proc/sysrq-trigger,观察是否生成 vmcore;若卡在 “Starting kdump service...” 或日志里出现 Failed to start kdump: No memory reserved for crash kernel,说明预留失败
  • vmcore 生成后,务必用 crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/*/vmcore 快速跑一遍,确认符号表能加载、bt 能打出栈——否则调试时才发现 vmlinux 版本不匹配,就晚了

复位原因不能靠猜,必须硬件+软件双钩子落地

工控场景下“莫名重启”最让人头疼,uptime 显示刚运行 3 小时,dmesg 却一片空白——大概率是硬件复位(看门狗、电源跌落、按键)绕过了内核日志路径。

  • 软件侧加钩子:在 arch/arm64/kernel/traps.c(或其他架构对应文件)的 die()arm64_notify_die()panic() 入口处插入 pr_emerg("PANIC @ %pS\n", _RET_IP_);,确保 panic 时强制刷屏
  • 硬件侧建黑匣子:利用片上 SRAM 或备用 flash 区域(如 SPI NOR 的 last 4KB),在 machine_restart()arm_pm_restart() 等所有复位入口前,把 __builtin_return_address(0) 和关键寄存器(SP_EL1, ELR_EL1)写入,复位后由 bootloader 或 init 阶段读出并落盘
  • 区分复位源:cat /sys/class/watchdog/watchdog0/status 可查看看门狗是否超时;某些 SoC(如 i.MX6)提供 src 寄存器,能直接读出上次复位是 POR / WDOG / SW_RST

别跳过 CPU 异常信号,soft lockup 往往是驱动死循环的前兆

系统没 panic,但响应迟滞、SSH 登录缓慢、top%sy 持续 90%+,dmesg 却无报错?很可能是 soft lockup —— 内核线程在关中断或禁抢占状态下执行太久,被 watchdog 检测到但未触发 panic。

  • 确认是否开启检测:cat /proc/sys/kernel/softlockup_panic 若为 0,则只会打印警告,不会 halt;建议设为 1echo 1 > /proc/sys/kernel/softlockup_panic)并写入 /etc/sysctl.conf
  • 典型软锁现场:INFO: task kworker/u8:2:123 blocked for more than 120 seconds. 后紧跟驱动函数名(如 dw_mci_wait_busy),说明 SDIO 驱动在等总线忙标志超时,可能因硬件信号异常或驱动未处理 timeout 分支
  • 配合 perf 定位热点perf record -e irq:softirq_entry -a sleep 10 可捕获软中断密集调用点;再用 perf report --sort comm,dso 查看哪个模块占最多

真正棘手的内核故障,往往不是单点报错,而是多个线索断点式分布:dmesg 里的 I/O error、kdump 里缺失的 vmcore、复位日志中混杂的 WDOG 和 POR 标记、以及 soft lockup 提示里一闪而过的驱动函数名——把这些碎片拼起来,才可能还原出硬件信号抖动 → 驱动等待超时 → 内核线程卡死 → 看门狗复位的完整链路。漏掉任意一环,排查就可能退回原点。

相关专题

更多
sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

383

2023.09.04

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

187

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

271

2023.10.25

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

382

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

567

2023.08.10

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

463

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

12

2025.12.06

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

478

2023.08.10

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

23

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.9万人学习

Git 教程
Git 教程

共21课时 | 2.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号