首页/系统/Linux 运维命令速查/dmesg 查看内核日志

dmesg 查看内核日志

dmesg 读内核环形缓冲区:内核启动、驱动加载、磁盘/网络错误、OOM 都在这;-T 转人类时间、--level 过滤级别。

Linux 运维命令速查系统更新于 2026-10-13

dmesg 是什么

dmesg 读取内核环形缓冲区,里面记录着内核启动过程、硬件探测、驱动加载、磁盘与文件系统错误、网络链路变化,以及 OOM 击杀事件。它与其他日志的根本区别在于来源:这不是应用写的日志,而是内核自己的记录,因此很多「应用无端消失」「磁盘突然只读」的现场只有这里才有。缓冲区容量有限,旧的记录会被新记录挤掉,重要报错要及时看。

基本信息

适用平台Linux(util-linux 的 dmesg);部分发行版出于安全考虑限制普通用户读取(kernel.dmesg_restrict)
命令语法dmesg [选项]
常用选项-T 把时间戳转为可读时间、--level 按级别过滤(emerg、alert、crit、err、warn、notice、info、debug)、-w 持续跟随、-H 人类友好输出、-c 读取后清空缓冲、-n 设置输出级别、-d 只显示两次读取之间的新消息
相关命令journalctl -k 读取同样的内核消息,但带持久化与启动轮次(-b)
缓冲区容量由内核参数 log_buf_len 决定,常见为几百 KB 到数 MB,写满后环形覆盖旧内容

典型使用场景

  • 进程被 OOM 击杀:确认是被内核回收还是自行退出,dmesg 会记录进程名与内存信息
  • 磁盘与文件系统异常:I/O error、只读重挂载、坏块与文件系统修复信息都在这里
  • 网卡与链路问题:链路 up/down、驱动加载失败、网卡重置记录
  • 开机硬件识别:确认磁盘、网卡、多了多少内存是否被正确识别
  • 服务自动重启前的现场:应用日志只有退出记录时,内核日志能补上原因
  • 内核参数与安全模块:确认加载了哪些模块、有无审计或 LSM 相关提示

常用示例

常用示例
dmesg -T | tail -n 50
dmesg -T --level=err,warn | tail -n 50
dmesg -T | grep -i -E 'oom|killed process|out of memory'
dmesg -T | grep -i -E 'i/o error|remounting filesystem read-only'
dmesg -H --level=err,warn            # 人类友好输出
dmesg -w                             # 持续跟随新消息
journalctl -k -b -n 100              # 持久化的内核日志,可按启动轮次查
journalctl -k -p err --since '1 hour ago'

常见内核消息

关键字含义下一步
Out of memory / Killed process内存不足触发了 OOM 击杀核对被杀的进程与当时的 available,查内存泄漏或限额
I/O error磁盘读写错误检查 SMART、dmesg 中的设备名与阵列状态
remounting filesystem read-only文件系统错误后被迫只读立刻备份数据,再排查存储与文件系统
link up / link down网卡链路状态变化核对网线、光模块与交换机端口
segfault用户进程发生段错误结合应用日志与 core dump 定位代码问题
Tainted kernel内核被标记为受污染(加载了非官方模块等)影响厂商支持与问题定位,需查历史原因
dmesg 的时间戳默认是自开机以来的秒数,跨天排查时很难与业务日志对齐,所以几乎总该加 -T(或 -H)转成可读时间。要长期保留内核日志,需要把 journald 配置为持久化存储(/var/log/journal 存在),否则重启后只有当前启动轮次的记录。
普通用户读不到 dmesg 时通常是内核参数 kernel.dmesg_restrict=1 在起作用,这是出于安全考虑的限制(缓冲区里可能包含地址等敏感信息),改用 sudo 或通过 journalctl -k 读取;判断当前设置可以查 /proc/sys/kernel/dmesg_restrict。
看到 I/O error 或文件系统被重挂载为只读时,首要动作是保护数据而不是重启:先把关键数据复制到其他设备,再评估是否做文件系统检查。反复重启可能让坏块扩散或让 fsck 在无人值守的情况下做危险操作。

易错点

  • 环形缓冲区很快会被新消息覆盖,关键内核报错要尽快查看或先落盘,不要指望第二天还能查到
  • 容器里看到的 dmesg 属于宿主内核日志,排查容器内部问题时应去应用日志与容器运行时日志里找
  • 把内核日志与应用日志混为一谈:应用异常的堆栈在应用日志里,dmesg 只在进程被内核处置(OOM、段错误)时才有关联记录
  • 查过一段时间前的内核问题却没有任何记录,往往是 journald 未持久化,重启后只保留当前轮次
  • 遇到 I/O error 或只读重挂载先重启,可能错过取证窗口并加重故障,应先保全数据再处理

数据来源与参考

  • man 1 dmesg(util-linux)
  • man 1 journalctl(-k)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌