温馨提示×

linux dmesg为何刷屏

小樊
44
2026-10-03 12:49:46
栏目: 智能运维

在 Linux 中,dmesg 本身只是一个查看内核环形缓冲区(kernel ring buffer)日志的命令,它不会“主动刷屏”。你看到的终端一直在滚日志 / 不断输出,通常是下面几类原因之一。


一、你执行了“持续查看”的命令(最常见)

并不是 dmesg 在刷屏,而是你用了实时跟踪方式:

dmesg -w
# 或
watch dmesg
# 或
tail -f /var/log/kern.log

这些命令会持续输出新内核日志,所以看起来像“刷屏”。

✅ 解决:

  • 按 Ctrl + C 停止
  • 或只查看一次:
    dmesg
    

二、内核在不断产生日志(真正“刷屏”的原因)

如果 dmesg -w 一直在滚,说明内核在频繁打印日志,常见来源:

1️⃣ 硬件问题(非常常见)

  • USB 设备不断插拔 / 接触不良
  • 网卡、硬盘、显卡报错
  • 电源管理(ACPI)异常

例子:

usb 1-1: device descriptor read/64, error -71

✅ 排查:

dmesg | tail -50

2️⃣ 驱动 BUG 或兼容性问题

  • 第三方驱动(NVIDIA / 无线网卡 / 虚拟设备)
  • 内核版本与驱动不匹配

表现:

  • 同一错误每秒几十次
  • 明显是某个模块名

3️⃣ 网络 / 防火墙疯狂打印

  • netfilter / iptables 日志规则
  • printk 级别过低

例子:

nf_conntrack: table full

4️⃣ 系统资源异常

  • OOM(内存耗尽)
  • CPU 软锁(soft lockup)
  • 磁盘 I/O 错误

三、日志级别太低(无关紧要也打印)

内核日志级别过低会导致调试信息也输出。

查看当前级别:

cat /proc/sys/kernel/printk

临时提高阈值(减少刷屏):

sudo dmesg -n 3

四、systemd / journald 在输出

有时你看到的“刷屏”其实是:

journalctl -f

而不是 dmesg。


五、如何快速定位“谁在刷”

看最近日志

dmesg -T | tail -100

看错误关键词

dmesg | grep -i error
dmesg | grep -i usb
dmesg | grep -i eth

看是哪个模块

dmesg | grep -i <模块名>

总结一句话

dmesg 不会自己刷屏,刷屏是因为内核在一直打日志,而你用了查看/监听方式。

如果你愿意,可以把刷屏的日志贴几行出来,我可以直接帮你判断是硬件、驱动还是配置问题。

0 踩