禁止日志打印到控制台
快速起步
如果你没有时间完整看文档,这里有一击必杀关闭带外日志输出的命令
详细见下文...
验证
输出类似(dmesg -n 1
指令设置的是第一列数值,即console_loglevel
: 消息的优先级高于此值(数字更小)则打印到控制台)
问题
线上有一个驱动程序存在bug,不断向串口控制台打印日志,导致系统响应缓慢。为了应急解决,决定暂时关闭内核消息输出到控制带。
在控制台大量快速输出日志(秒级数十条相同日志)会有如下特征:
操作系统中看
top
负载极高(load average),load average数值远超过服务器CPU数量。top
显示的us
和sys
非常低,并且也几乎没有iowait
,系统显示非常idlemcelog
日志输出中没有显示cpu或内存硬件故障,系统messages
日志中也没有硬件错误,但是有重复kernel日志系统响应缓慢
以下是一个top截图
关闭内核日志
采用如下命令停止除了panic消息以外的所有内核消息(和驱动)输出到console:
这里
dmesg [-c] [-n level] [-s bufsize]
,所以设置1
表示日志级别调整成1
,这样只有高于KERN_ALERT
的日志才能记录,实际上就只有系统不可用(system is unusable)的日志可以输出到控制台。
loglevel(日志界别) 说明
只有低于控制台日志级别的内核消息才会打印到控制台。这个日志级别也会更改klogd
或其他程序。日志级别定义如下:
内核
printk
设置说明
在内核 /proc/sys/kernel/printk
中设置了4个字段的内核级别,分别代表 console_loglevel
, default_message_loglevel
, minimum_console_loglevel
, default_console_loglevel
,可以通过如下命令检查
发行版如Red Hat
,默认配置是 4 4 1 4
参考 Try to disable console output, console=null doesn't work 通过 sysctl 方式设置,可以修改成 3 4 1 3
。这里我为了能够最小化,改成 1 4 1 3
即
参考
Last updated