dmesg缓冲区是固定大小的内核环形缓冲区(通常几mb),填满后新消息覆盖旧消息,虽不显著拖慢系统但干扰故障排查;清理方式包括sudo dmesg -c(清空无输出)和sudo dmesg -c(先显示后清空),还可通过调整kernel.printk值限制日志级别以治本。

dmesg 缓冲区本身不直接占用大量内存,但它是一个固定大小的内核环形缓冲区(通常几MB),长期运行或频繁记录日志后可能填满,导致新消息覆盖旧消息——虽然不会显著拖慢系统,但在排查问题时干扰大,且极少数情况下(如日志级别过低、高频调试输出)可能间接加剧内存压力。真正需要清理,往往是为了聚焦近期事件、避免干扰诊断,或配合故障复现。
以下是几种实用、安全的清理方式,按使用场景区分:
临时清空当前缓冲区(推荐日常使用)
这个操作只清除内存中的环形缓冲区内容,不影响历史日志文件,也不改变日志级别:
-
sudo dmesg -C
直接清空缓冲区,无输出。 -
sudo dmesg -c
先显示全部现有日志,再清空缓冲区。适合想快速查看+重置的场景。
两者都立即生效,重启后缓冲区会重新填充新日志。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
控制日志输出量(治本,防堆积)
避免缓冲区反复填满,关键是限制内核打印哪些消息:
- 查看当前日志级别:
cat /proc/sys/kernel/printk(输出类似7 4 1 7,第一个数字是控制台日志级别) - 临时调高过滤门槛(例如只显示 warning 及以上):
sudo sysctl -w kernel.printk="3 4 1 7"
这里3对应err级别,意味着info、debug类低优先级消息不再进入缓冲区。 - 永久生效需写入
/etc/sysctl.conf:echo 'kernel.printk = 3 4 1 7' | sudo tee -a /etc/sysctl.conf
再执行sudo sysctl -p加载。
注意:不要盲目设成 1 4 1 7(只留 emerg)
紧急级别以下全丢弃,会丢失驱动加载失败、硬件告警等关键线索,仅建议在明确调试目标且短期使用。
补充:释放的是内核缓冲区内存,不是磁盘空间/var/log/dmesg 是启动时快照,静态文件,删它不释放运行时内存;而 dmesg -C 清的是 RAM 中的环形缓冲区,属于内核直接管理的内存页,清完后这部分内存可被系统复用。
不复杂但容易忽略。










