[daily][linux] dmesg格式里的时间为什么不准

我们能看见dmesg的日志带有时间,用dmesg -T参数

[[email protected] ~]# dmesg -T |tail -n 4
[Tue Jan 21 22:05:11 2020] nginx[7607]: segfault at 8 ip 00007f5323cf77a1 sp 00007fff9ce5e030 error 4 in nginx[7f5323c01000+142000]
[Tue Jan 21 22:07:17 2020] nginx[12710]: segfault at 8 ip 00007f5323cf77a1 sp 00007fff9ce5e010 error 4 in nginx[7f5323c01000+142000]
[Tue Jan 21 22:10:19 2020] nginx[18345]: segfault at 8 ip 00007f5323cf77a1 sp 00007fff9ce5e030 error 4 in nginx[7f5323c01000+142000]
[Tue Jan 21 22:10:57 2020] nginx[26517]: segfault at 8 ip 00007f5323cf77a1 sp 00007fff9ce5e030 error 4 in nginx[7f5323c01000+142000]

然后有一天,我发现,这个时间戳是不对的。如下,用混杂模式触发一条日志:

[[email protected] ~]# date
Tue Jan 21 16:32:23 CST 2020
[[email protected] ~]# dmesg -T |tail
[Tue Jan 21 22:01:45 2020] device eth0 left promiscuous mode
[[email protected] ~]# cat /var/log/messages |grep eth0
Jan 21 16:32:21 A04-R068-I136-198-JDCLOUD kernel: device eth0 left promiscuous mode

观察三个时间,dmesg里,快了7个半小时。 因为它记录的是系统启动到现在的相对时间。秒数,如原始日志

[[email protected] ~]# dmesg |tail -n 4
[40354589.699747] nginx[7607]: segfault at 8 ip 00007f5323cf77a1 sp 00007fff9ce5e030 error 4 in nginx[7f5323c01000+142000]
[40354715.335800] nginx[12710]: segfault at 8 ip 00007f5323cf77a1 sp 00007fff9ce5e010 error 4 in nginx[7f5323c01000+142000]
[40354897.701943] nginx[18345]: segfault at 8 ip 00007f5323cf77a1 sp 00007fff9ce5e030 error 4 in nginx[7f5323c01000+142000]
[40354935.607226] nginx[26517]: segfault at 8 ip 00007f5323cf77a1 sp 00007fff9ce5e030 error 4 in nginx[7f5323c01000+142000]

计算验证一下:

[[email protected] ~]# uptime -s
2018-10-11 20:28:43
[[email protected] ~]# date -d ‘2018-10-11 20:28:43‘ +%s
1539260923
[[email protected] ~]# date +%s
1579596146
[[email protected] ~]# expr 1579596146 - 1539260923
40335223
[[email protected] ~]# dmesg |tail -n 1
[40354935.607226] nginx[26517]: segfault at 8 ip 00007f5323cf77a1 sp 00007fff9ce5e030 error 4 in nginx[7f5323c01000+142000]

因为参考系不同,所以出现了如上的偏差。dmesg里的时间参考CPU的时钟频率(?)。系统时间参考的时候外部时间服务器。

也就是说,466多天的运行,使本机的计时与真实时间产生了7个小时30分钟的误差。

而由于ntp的存在,或手动调整过时间,使系统时间与真实时间保持了一致。

[classic_tong @ https://www.cnblogs.com/hugetong/p/12222470.html]

原文地址:https://www.cnblogs.com/hugetong/p/12222470.html

时间: 2024-10-30 11:20:20

[daily][linux] dmesg格式里的时间为什么不准的相关文章

Linux汇总一——Linux程序管理,Linux终端,Linux命令格式、命令类型及Linux命令帮助

本章blog主要汇总了Linux程序管理,linux应用程序的分类,Linux终端类型,Linux命令格式.命令类型及Linux命令帮助等相关知识点,并介绍了man命令,which命令,type命令,tty命令,hash命令,dirname命令,basename命令,who命令的相关功能及选项. 本章Blog相关Linux知识点 计算机=硬件+软件 . 冯诺依曼理论,五大部件:CPU -- 运算器.控制器, 存储器,输入设备,输出设备. Shell 环境是通过环境变量进行配置的 ,环境变量保存对

linux 分区格式查看

Linux分区格式查看 两个文件 /etc/fstab 和/etc/mtab /etc/fstab是用来存放文件系统的静态信息的文件,当系统启动的时候. 系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录. /etc/mtab则显示的是已经被挂载的fs的清单文件. 每当 mount 挂载分区.umount 卸载分区,都会动态更新 mtab,mtab 总是保持着当前系统中已挂载的分区信息,fdisk.df 这类程序,必须要读取 mtab 文件,才能获得当前系统中的分

linux命令格式及基础命令(一)

linux命令格式 ~]#COMMAND [选项] [参数] 例如: ~]#ls 不带任何选项和参数 ``` stylus ~]#ls -lh /etc 列出/etc下所有文件和目录,同时要求以格式和以友好可读的方式显示 1.ifconfig命令 列如: ~]#ifconfig 显示所有网卡信息(简略) ~]#ifconfig -a 显示所有网卡信息 ~]#ifconfig eth0 显示指定网卡 2.echo命令 格式:echo string 列如: ~]#echo '$SHELL' ~]#e

C#中 String 格式的日期时间 转为 DateTime

C#中并没有表示时间的变量,只有DateTime,所以要表示时间,可以用TimeSpan表示. 方法一:Convert.ToDateTime(string) string格式有要求,必须是yyyy-MM-dd hh:mm:ss 方法二:Convert.ToDateTime(string, IFormatProvider) DateTime dt; DateTimeFormatInfo dtFormat = new System.GlobalizationDateTimeFormatInfo();

linux在shell date获取时间的相关操作

获得当天的日期 date +%Y-%m-%d 输出: 2011-07-28 将当前日期赋值给DATE变量DATE=$(date +%Y%m%d) 有时候我们需要使用今天之前或者往后的日期,这时可以使用date的 -d参数 获取明天的日期 date -d next-day +%Y%m%d 获取昨天的日期 date -d last-day +%Y%m%d 获取上个月的年和月 date -d last-month +%Y%m 获取下个月的年和月date -d next-month +%Y%m 获取明年

【转】C#语言之“string格式的日期时间字符串转为DateTime类型”的方法

方法一:Convert.ToDateTime(string) string格式有要求,必须是yyyy-MM-dd hh:mm:ss ================================================ 方法二:Convert.ToDateTime(string, IFormatProvider) DateTime dt; DateTimeFormatInfo dtFormat = new System.GlobalizationDateTimeFormatInfo()

Linux 基本命令(一)--时间 常用命令

2019-07-30 date 系统时间参数 显示时间是个常用的命令,在写shell脚本中也经常会用到与日期相关文件名或时间显示.无论是linux还是windows下都是date命令. Linux下date命令用法 date [OPTION]… [+FORMAT] date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] date命令参数 -d, –date=STRING  显示STRING指定的时间 -f, –file=DATEFILE  类似–d

Java获得不同格式的系统时间

(1)创建Date类的对象,已Date类的对象为基础,用DateFormat类对象调用format()方法格式化Date对象得到不同格式的系统时间. import java.text.DateFormat; import java.util.Date; //以下默认时间日期显示方式都是汉语语言方式 //一般语言就默认汉语就可以了,时间日期的格式默认为MEDIUM风格,比如:2016-4-18 20:11:27 //以下显示的日期时间都是再Date类的基础上得来的,还可以利用Calendar类来实

linux和windows双系统时间错误解决方法

转自http://www.2cto.com/os/201204/126212.html windows时间会慢8小时,原因: 两个概念: UTC即Universal Time Coordinated,协调世界时 GMT 即Greenwich Mean Time,格林尼治平时 Windows 与 Mac/linux 缺省看待系统硬件时间的方式是不一样的: Windows把系统硬件时间当作本地时间(local time),即操作系统中显示的时间跟BIOS中显示的时间是一样的. linux/Unix/