讲师中心 微信公众号
AI工具推荐 视频效率加速

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

夏杰君_7623

夏杰君_7623

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

|

943人浏览过

|

来源于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 却一片空白——大概率是硬件复位(看门狗、电源跌落、按键)绕过了内核日志路径。

财经热点新闻爬取与话题归纳系统
财经热点新闻爬取与话题归纳系统

抓取主流财经网站实时热点,提供混合评分与专业HTML报告,支持快讯采集和话题归纳。

下载
  • 软件侧加钩子:在 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;建议设为 1(echo 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 提示里一闪而过的驱动函数名——把这些碎片拼起来,才可能还原出硬件信号抖动 → 驱动等待超时 → 内核线程卡死 → 看门狗复位的完整链路。漏掉任意一环,排查就可能退回原点。

热门AI工具

更多
PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

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

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

1138

2023.09.04

scripterror怎么解决
scripterror怎么解决

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

989

2023.10.18

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

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

3020

2023.10.25

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

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

5967

2023.07.18

堆和栈区别
堆和栈区别

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

2548

2023.08.10

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

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

4016

2024.01.03

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

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

306

2025.12.06

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

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

4278

2023.08.10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn