最近由于服务器内存异常,查看了一下dmesg的日志,结果发现dmesg显示的时间是将来的时间。由于时间不准确,在进行排障的时候造成了一些麻烦;以下显示当前系统时间是2022/3/10,而dmesg中显示的时间为2022/3/11。
[root@qm86 /root]#uptime
09:41:39 up 867 days, 19:54, 1 user, load average: 3.52, 0.73, 0.24
[root@qm86 /root]#date
Thu Mar 10 09:32:52 CST 2022
[root@qm86 /root]#dmesg -T | tail -1
[Fri Mar 11 05:44:08 2022] docker0: port 13(vethf341b34) entered disabled state
向dmesg中插入一条最新的数据,计算时间误差
[root@qm86 /root]#echo test > /dev/kmsg
[root@qm86 /root]#dmesg -T | tail -1
[Fri Mar 11 05:44:43 2022] test
可以发现比真实的时间快了将近20个小时。
注意:
以上环境中配置有时钟服务器,并且服务器都进行了时间同步
查看dmesg的帮助文档
-T, --ctime
Print human readable timestamps. The timestamp could be inaccurate!
The time source used for the logs is not updated after system SUSPEND/RESUME.
当系统被挂起或恢复会dmesg的时间不会更新。
将系统挂起再恢复进行测试
[root@node01 ~]# date
Thu Mar 10 10:17:30 CST 2022
[root@node01 ~]# echo test > /dev/kmsg
[root@node01 ~]# dmesg -T | tail -1
[Thu Mar 10 10:13:43 2022] test
可以发现dmesg的时间比真实时间慢了4分钟,符合dmesg帮助文档的解释,但是这个解释dmesg的时间永远都慢与系统时间,而不应该出现将来的时间这种情况。
总结
暂时还没有弄清楚为什么会出现dmesg的时间是将来的时间,在遇到需要查询dmesg日志,但是时间不对的情况下,可以先计算dmesg时间与系统时间的误差,然后再结合这个误差推算日志发生的真实时间。