0

0

Linux内核日志分析教程_dmesg与内核异常排查

舞姬之光

舞姬之光

发布时间:2026-01-08 20:22:45

|

316人浏览过

|

来源于php中文网

原创

dmesg是查看Linux内核环形缓冲区日志的核心工具,用于快速定位硬件、驱动、内存、IO等底层问题;需结合时间戳、子系统标识、日志级别(ERR/WARN/INFO/ALERT)及过滤参数(-l, -T, -w, -c)高效分析,并联动lspci、modinfo、iostat等工具闭环排查。

linux内核日志分析教程_dmesg与内核异常排查

Linux内核日志是排查系统底层问题最直接的线索,dmesg 命令是查看和分析这些日志的核心工具。它输出的是内核环形缓冲区(ring buffer)中的消息,涵盖硬件检测、驱动加载、内存分配、设备热插拔、Oops/panic等关键事件。掌握 dmesg 的用法和解读逻辑,能快速定位卡顿、设备失联、启动失败、IO异常等典型问题。

理解 dmesg 输出的关键字段与级别

运行 dmesg 默认输出类似:

[ 1.234567] usb 1-1: new high-speed USB device number 2 using xhci_hcd
[ 2.890123] EXT4-fs (sda1): mounted filesystem with ordered data mode
[ 34.567890] ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
[ 123.456789] BUG: unable to handle kernel NULL pointer dereference at 0000000000000000

每行开头的 [ X.XXXXXX] 是内核启动后的时间戳(单位:秒),用于判断事件发生的相对顺序;中括号后的字符串(如 usb 1-1:EXT4-fs (sda1):)标识子系统或设备;冒号后是具体信息。日志级别隐含在内核源码中,常见有:

  • KERN_ERR(红色,常带“error”、“failed”、“timeout”)→ 驱动初始化失败、IO超时、设备拒绝响应
  • KERN_WARNING(黄色,含“warning”、“deprecated”、“overrun”)→ 潜在风险,如DMA缓冲区溢出、固件版本不匹配
  • KERN_INFO(白色,默认级别)→ 正常事件,如模块加载、设备识别,需结合上下文判断是否异常
  • KERN_ALERT / KERN_EMERG → 内核已无法继续运行,通常伴随 panic 或 oops,需立即关注

高效过滤与实时监控 dmesg 日志

原始输出信息量大,需配合参数聚焦重点:

YouWare
YouWare

社区型AI编程平台,支持一键部署和托管

下载
  • dmesg -l err,warn:只显示错误和警告,排除干扰
  • dmesg -T | grep -i "nvme\|ata\|raid":加人类可读时间戳(-T),再按关键词过滤存储相关报错
  • dmesg -w:持续监听新日志,适合复现问题时观察(如插拔U盘、触发磁盘IO)
  • dmesg -c:清空缓冲区并输出当前内容,常用于故障复位后重新捕获新异常
  • dmesg --level=err --source=kernel:精确限定为内核自身产生的错误(排除 systemd-journald 注入的日志)

注意:dmesg 默认不记录到磁盘,重启后丢失。如需持久化,应确保 rsyslogjournald 已配置捕获 kernel facility(如 rsyslog 中 /etc/rsyslog.d/50-default.confkern.* /var/log/kern.log)。

识别典型内核异常模式

以下日志片段代表高频真实问题,需结合硬件环境与操作上下文交叉验证:

  • ataX.YY: failed command: READ FPDMA QUEUED + status: { DRDY ERR } → SATA/NVMe链路不稳定,检查线缆、供电、固件或更换端口
  • Memory failure on page + 物理地址 → 内存条存在坏块,用 memtest86+ 彻底检测,或通过 edac-util 查看ECC纠错计数
  • nf_conntrack: table full, dropping packet → 连接跟踪表溢出,调高 net.netfilter.nf_conntrack_max 或优化防火墙规则
  • INFO: task XXX blocked for more than 120 seconds → 进程长时间不可中断休眠(D状态),常见于IO卡死、NFS挂载点无响应、驱动死锁
  • BUG: soft lockup - CPU#X stuck for XXs! → 某CPU核心长时间未调度,可能由驱动忙循环、中断风暴或散热降频导致

关联其他工具完成闭环排查

dmesg 提供“发生了什么”,但需联动其他命令确认“为什么发生”和“影响范围”:

  • 查设备状态:lspci -vv -s 0000:01:00.0(对应 dmesg 中 PCI 地址)→ 看链路宽度、错误计数、电源管理状态
  • 查驱动细节:modinfo ixgbe + cat /sys/module/ixgbe/parameters/* → 验证驱动版本与启用参数是否匹配硬件需求
  • 查内存映射:cat /proc/meminfo | grep -i "hardware\|corrupt" → 辅助判断内存类错误是否被硬件层上报
  • 查IO延迟:iostat -x 1 + iotop → 若 dmesg 显示 IO timeout,需确认是上层应用压力过大,还是底层磁盘响应异常
  • 抓取完整 Oops:dmesg -T | grep -A20 -B5 "Oops:" → 获取寄存器值、栈回溯,用 addr2line -e vmlinux ... 定位代码行(需调试符号)

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

231

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

435

2024.03.01

scripterror怎么解决
scripterror怎么解决

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

186

2023.10.18

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

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

271

2023.10.25

scripterror怎么解决
scripterror怎么解决

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

186

2023.10.18

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

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

271

2023.10.25

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

253

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

206

2023.09.04

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

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

2

2026.01.09

热门下载

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

精品课程

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

共48课时 | 6.8万人学习

Git 教程
Git 教程

共21课时 | 2.5万人学习

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

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