dmesg是查看Linux内核环形缓冲区日志的核心工具,用于快速定位硬件、驱动、内存、IO等底层问题;需结合时间戳、子系统标识、日志级别(ERR/WARN/INFO/ALERT)及过滤参数(-l, -T, -w, -c)高效分析,并联动lspci、modinfo、iostat等工具闭环排查。
Linux内核日志是排查系统底层问题最直接的线索,dmesg 命令是查看和分析这些日志的核心工具。它输出的是内核环形缓冲区(ring buffer)中的消息,涵盖硬件检测、驱动加载、内存分配、设备热插拔、Oops/panic等关键事件。掌握 dmesg 的用法和解读逻辑,能快速定位卡顿、设备失联、启动失败、IO异常等典型问题。
运行 dmesg 默认输出类似:
每行开头的 [ X.XXXXXX] 是内核启动后的时间戳(单位:秒),用于判断事件发生的相对顺序;中括号后的字符串(如 usb 1-1:、EXT4-fs (sda1):)标识子系统或设备;冒号后是具体信息。日志级别隐含在内核源码中,常见有:
原始输出信息量大,需配合参数聚焦重点:
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 默认不记录到磁盘,重启后丢失。如需持久化,应确保 rsyslog 或 journald 已配置捕获 kernel facility(如 rsyslog 中 /etc/rsyslog.d/50-default.conf 含 kern.* /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" → 辅助判断内存类错误是否被硬件层上报iostat -x 1 + iotop → 若 dmesg 显示 IO timeout,需确认是上层应用压力过大,还是底层磁盘响应异常dmesg -T | grep -A20 -B5 "Oops:" → 获取寄存器值、栈回溯,用 addr2line -e vmlinux ... 定位代码行(需调试符号)
# linux
# var
# pointer
# number
# 事件
# default
# alert
# table
# bug
# 关键词
# 闭环
# 长时间
# 死锁
# 固件
# 链路
# 的是
# 加载
# 内存条
# using
# 循环
# 字符串
# 防火墙
# u盘
# 端口
# 工具
# usb
# 栈
# ai
# ios
# .net
# lsp
# yy
# 为什么
# red
# NULL
# for
# Error
# Filesystem
# 只显示