首页/系统/Linux 内核与性能调优速查/kernel.printk 控制台日志级别
sysctl 内核参数72 条

kernel.printk 控制台日志级别

四元组控制日志输出行为:控制台级别、默认消息级别、控制台最低级别、启动默认级别(常见值 4 4 1 7);级别数值越小消息越重要。

控制台日志级别

kernel.printk 是一组四个数值,控制内核日志往控制台输出的行为:控制台级别、默认消息级别、最低控制台级别、启动默认级别,常见值是 4 4 1 7。内核日志级别从 0(EMERG,最严重)到 7(DEBUG,最详细),数值越小越重要;只有级别数值小于控制台级别的消息才会被打印到控制台。这个参数影响的是上屏,不是记录。

基本信息

格式kernel.printk = 控制台级别 默认消息级别 最低控制台级别 启动默认级别
常见默认值4 4 1 7
级别范围0(EMERG)到 7(DEBUG),数值越小越重要
等价文件/proc/sys/kernel/printk
临时调整dmesg -n 级别,仅当前会话生效

典型使用场景

  • 串口控制台被大量内核日志拖慢,虚拟机与云主机常见
  • 排障时需要临时看到更低级别(更详细)的内核信息
  • 控制台输出影响启动速度或串口吞吐时收敛输出量
  • 区分「控制台不显示」与「日志没有记录」这两种现象
  • 安全审计:级别过宽会把内核调试信息暴露给控制台访问者

查看与调整

查看与调整
cat /proc/sys/kernel/printk          # 直接读四元组
sysctl kernel.printk                 # 等价的读取方式
sysctl -w kernel.printk='4 4 1 7'    # 临时恢复常见默认值
dmesg -n 3                           # 本会话降低控制台输出量(重启失效)
dmesg -T | tail -20                  # 缓冲区记录仍在,dmesg 不受 printk 影响
dmesg -w                             # 实时跟随内核消息观察效果

四元组逐项读法

位置名称含义
第 1 个console_loglevel级别数值小于它的消息才打印到控制台
第 2 个default_message_loglevel未显式带级别的消息使用的默认级别
第 3 个minimum_console_loglevel控制台级别允许被调低的下限
第 4 个default_console_loglevel启动时使用的控制台级别
判定方向容易记反:内核只把级别数值小于控制台级别的消息送上控制台,所以第一个数调小是少打印、调大是多打印。
printk 只影响控制台输出,不减少 dmesg 环形缓冲区里的记录量;两条路径要分开判断。

易错点

  • 把数字方向记反:调小是少上屏、调大是多上屏,误判后越调越吵
  • 以为能减少 dmesg 记录量:缓冲区照旧记录,只是不再往控制台刷
  • 用 dmesg -n 想持久化:该命令只作用于当前会话,持久化要写 sysctl 配置
  • 级别收得过严失去崩溃现场:严重告警也上不了串口,故障时拿不到第一手信息
  • 在容器内调整:写入的是宿主内核参数,影响整台机器而不只是当前容器

数据来源与参考

  • Linux 内核 Documentation/admin-guide/sysctl/kernel.rst
  • man 1 dmesg
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌