printk 与内核日志级别
内核日志级别由 printk 参数控制,决定哪些级别的内核消息会被打印到控制台。控制台太吵会淹没真正重要的报错,太安静又会漏掉驱动与硬件的关键信息。通过 /proc/sys/kernel/printk 或 sysctl 可以临时调整,做驱动排错时常把级别放宽到 info,排完再恢复。
基本信息
| 调整入口 | /proc/sys/kernel/printk 或 sysctl kernel.printk |
|---|---|
| 取值格式 | 四个数字:控制台级别、默认级别、最低级别、引导默认级别 |
| 持久化位置 | /etc/sysctl.d/ 下的配置文件 |
| 常用值 | 4 4 1 7 表示控制台只显示 warning 及以上 |
典型使用场景
- 控制台被海量内核消息刷屏,需要压低打印级别
- 驱动或硬件异常,临时放宽到 info 级别观察细节
- 云主机串口控制台噪音过大,影响查看启动日志
- 统一同批机器的 printk 策略,便于集中采集
- 排查内核态报错被限级过滤掉的情况
- 变更前后记录 printk 值,便于回退与审计
常用示例
常用示例
cat /proc/sys/kernel/printk # 查看当前四个数值
sysctl -w kernel.printk='4 4 1 7' # 临时调整,控制台只显示 warning 以上
dmesg -w | head # 观察内核消息流是否变化
echo 'kernel.printk = 4 4 1 7' | sudo tee /etc/sysctl.d/99-printk.conf # 持久化
sysctl -p /etc/sysctl.d/99-printk.conf # 立即加载该文件
journalctl -k --since today | tail -20 # 从日志侧核对消息级别
dmesg -n 1 # 另一条路径:临时改控制台级别四个数字读法
| 位置 | 含义 | 影响 |
|---|---|---|
| 第一位 | 控制台日志级别 | 数字越小越安静,级别低于它的消息不上控制台 |
| 第二位 | 未指定级别时的默认值 | 影响 printk 调用缺省行为 |
| 第三位 | 可设置的最低级别 | 限制能设多低的阈值 |
| 第四位 | 引导时的默认值 | 开机阶段沿用该值 |
第一位是控制台日志级别:数字越小越安静,例如设为 4 表示只有 warning 及以上级别才会打印到控制台,info 与 debug 级消息被过滤掉。
把 printk 级别调低之后,紧急报错也可能不再出现在控制台上;排障结束要及时恢复原值,尤其是串口控制台作为唯一查看通道的机器。
容器内调整 printk 实际作用于宿主机内核:影响面超出单个容器,操作前最好知会平台或同机其他使用者。