dmesg¶
dmesg的数据¶
dmesg
并不是从 /var/log/dmesg
文件中读取数据,而是直接从内核的 ring buffer
中直接读取,并输出最近的N个消息。当主机启动过程最后, dmesg
发起一个将启动信息写入 /var/log/dmesg
。一旦在系统中运行了 syslogd
rsyslogd
( rsyslog服务 ) 或者 syslog-ng服务 ,这些syslog服务就会从内核缓存(kernel buffer)中读取数据并写入 /var/log/kern.log
这样的文件(基于发行版不同,可能会有其他文件)。只要系统能够写入磁盘,在系统crash之前,日志服务会不断将buffer中信息刷入磁盘日志文件,也就是能够从这些日志中获取系统信息。
常用dmesg命令¶
默认没有任何参数时,
dmesg
将输出所有在 kernel ring buffer 中的消息:dmesg
为了方便查看,可以结合
less
命令:dmesg | less
为了显示有关内存,硬盘,usb以及唇口信息,可以分别使用如下命令:
dmesg | grep -i memory dmesg | grep -i dma dmesg | grep -i usb dmesg | grep -i tty
或者合并上述命令:
dmesg | grep -E "memory|dma|ubs|tty"
如果要在读取之后清理掉dmesg日志,可以使用
-C
参数:dmesg -C
不过,一般没有必要
有用的技巧
: 显示彩色输出信息-L
参数:dmesg -L
这个命令参数对于查看错误信息非常有用,特别会看到错误信息或者关键信息使用红色标记出来,非常醒目
只查看 daemon 相关信息:
dmesg --facility=daemon
就能够看到很多和 Systemd进程管理器 相关服务信息,便于集中排查服务问题
上述 --facility
支持的参数有:
kern
user
daemon
auth
syslog
lpr
news
查看指定级别的信息也是排查问题非常有用的参数,例如
--level=err,warn
dmesg --level=err,warn
时间戳参数
-T
可以显示易于阅读的消息:dmesg -T
此外,有一个 x
参数结合起来更为方便:
dmesg -Tx
可以看到不同级别信息,例如:
kern :notice: [Wed Mar 23 15:32:02 2022] RPC: fragment too large: 1949507633
kern :notice: [Wed Mar 23 15:32:02 2022] RPC: fragment too large: 1949507633
kern :warn : [Wed Mar 23 15:32:08 2022] net_ratelimit: 15 callbacks suppressed
kern :info : [Wed Mar 23 15:32:08 2022] TCP: tcp_parse_options: Illegal window scaling value 123 > 14 received
kern :notice: [Wed Mar 23 15:32:32 2022] RPC: fragment too large: 50331667
kern :notice: [Wed Mar 23 15:32:32 2022] RPC: fragment too large: 50331691
kern :info : [Wed Mar 23 15:32:40 2022] TCP: tcp_parse_options: Illegal window scaling value 123 > 14 received
kern :info : [Wed Mar 23 15:33:33 2022] TCP: tcp_parse_options: Illegal window scaling value 123 > 14 received
kern :err : [Fri Mar 25 11:57:55 2022] ata1.00: exception Emask 0x0 SAct 0x10000000 SErr 0x0 action 0x6 frozen
kern :err : [Fri Mar 25 11:57:55 2022] ata1.00: failed command: READ FPDMA QUEUED
kern :err : [Fri Mar 25 11:57:55 2022] ata1.00: cmd 60/08:e0:c8:70:11/00:00:20:00:00/40 tag 28 ncq dma 4096 in
res 40/00:00:00:4f:c2/00:00:00:00:00/00 Emask 0x4 (timeout)
kern :err : [Fri Mar 25 11:57:55 2022] ata1.00: status: { DRDY }
kern :info : [Fri Mar 25 11:57:55 2022] ata1: hard resetting link
kern :info : [Fri Mar 25 11:57:55 2022] ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
kern :info : [Fri Mar 25 11:57:55 2022] ata1.00: configured for UDMA/133
kern :info : [Fri Mar 25 11:57:55 2022] ata1: EH complete
kern :info : [Fri Mar 25 11:57:55 2022] ata1.00: Enabling discard_zeroes_data
kern :err : [Fri Mar 25 11:59:30 2022] ata1.00: exception Emask 0x0 SAct 0x1000000 SErr 0x0 action 0x6 frozen
kern :err : [Fri Mar 25 11:59:30 2022] ata1.00: failed command: READ FPDMA QUEUED
kern :err : [Fri Mar 25 11:59:30 2022] ata1.00: cmd 60/08:c0:40:65:5a/00:00:00:00:00/40 tag 24 ncq dma 4096 in
res 40/00:01:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
kern :err : [Fri Mar 25 11:59:30 2022] ata1.00: status: { DRDY }
实时系统信息输出,可以使用参数
--follow
,结合上面的-Tx
参数,对于观察不断输出的系统日志非常方便:dmesg -Tx --follow