暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Exadata主机频繁地出现PPM exceeds tolerance 500 PPM

7481

作者简介

石云华,Exadata中国用户组联合创始人,ORACLE ACE。毕业后一直从事Oracle数据库第三方运维服务工作,拥有十余年电信运营商、保险、税务、电力行业核心系统数据库运维经验。现就职于北京海天起点技术服务股份有限公司,oracle数据库专家组成员,Exadata部门负责人。个人著作有《Exadata实施运维指南》,《Oracle Exadata性能优化》

案例概要:

在一次巡检过程中,分析计算节点的操作系统日志时,发现操作系统的message日志中记录了大量的NTP报错信息,信息如下所示。

Jan  30 02:16:06 dm01dbadm02 ntpd[95628]: frequency error 509 PPM exceeds  tolerance 500 PPM

Jan  30 02:17:26 dm01dbadm02 ntpd[95628]: frequency error 546 PPM exceeds  tolerance 500 PPM

Jan  30 02:19:34 dm01dbadm02 ntpd[95628]: frequency error 572 PPM exceeds  tolerance 500 PPM

Jan  30 02:20:06 dm01dbadm02 ntpd[95628]: frequency error 517 PPM exceeds  tolerance 500 PPM

Jan  30 02:22:14 dm01dbadm02 ntpd[95628]: frequency error 566 PPM exceeds  tolerance 500 PPM

Jan  30 02:23:18 dm01dbadm02 ntpd[95628]: frequency error 532 PPM exceeds  tolerance 500 PPM

Jan  30 02:24:22 dm01dbadm02 ntpd[95628]: frequency error 530 PPM exceeds tolerance  500 PPM

 

案例分析及处理:

在处理这个NTP故障之前,我们有必要先弄清PPM exceeds tolerance 500PPM到底是什么意思,ppm是一个抽象的时间差单位,为百万分之一乘以每天的总秒数((1/1000000)*24*60*60),我们将简单地认为12ppm大致相当于每天相差一秒,所以500ppm意味着时钟每天要相差43秒。当服务器时间比从NTP服务器时间计算的实时时间慢或快超过43秒时,NTP将在操作系统日志文件中打印一条消息PPM exceeds tolerance500 PPM。

在服务器重新启动期间,计算节点将首先读取硬件时钟作为操作系统时钟,一旦NTPD服务启动,它将与NTP服务器同步系统时间,发生这个问题通常是因为计算节点的硬件时钟时间可能与NTP服务器时间不同。

运行ntpq -p命令查看Exadata计算节点的NTP时钟同步状态,发现NTP时钟同步服务器使用的是本地时钟,因为其他的NTP服务器与当前计算节点的系统时间相差高达43秒以上,信息如下所示。

[root@dm01dbadm02  ~]# ntpq -pn

remote  refid st t when poll reach delay offset jitter

=================================================================

192.168.0.151  .LOCL. 1 u 235 1024 377 0.450 44675.7 540.772

*127.127.1.0  .LOCL. 10 l 5 64 377 0.000 0.000 0.001

IP为192.168.0.151的NTP服务器没有被优先选为NTP服务器,因为该服务器和计算节点之间的偏移量很大,超过43秒,为了避免时间的突然大幅度更改,NTP会拒绝进行大幅度的时钟调整,阈值是500ppm,即43秒。如果本地时钟与参考时钟的间隔超过43秒,NTP守护进程将不再尝试将其同步到参考时钟。虽然计算节点认为192.168.0.151是NTP服务器,但计算节点没有与此NTP服务器同步时间,而是用的本地时间。

 

计算节点上的本地时钟在到NTP服务器之间时间间隔会超过43秒,有如下几种可能的原因:

(1)、NTP服务器也许已经在很长一段时间内不可用,如果没有任何可用的NTP服务器,系统时钟的自然偏移通常是每天几秒钟。

(2)、硬件缺陷。内置的时间戳计数器(time stamp counter,简称TSC)CPU寄存器工作不正常,Bug17569550 COMPUTED FREQ VARIATION IN QUICK_PIT_CALIBRATE() LEADS TO INACCURATESYSTEM TIME中有记录,这个缺陷事实上是极度偶然的,因为它只发生在系统管理中断(SystemManaged Interrupt,简称SMI)恰好在内核引导期间校准TSC的时候出现。为了跟踪时间的流逝,TSC依赖于CPU上的寄存器,该寄存器计算自复位以来的周期数。根据循环计数计算实际通过的时间的公式还需要CPU频率(MHz)的精确值。这个值是在内核启动时计算和校准,如果在频率校准程序运行时发生SMI,所获得的MHz值将不准确,所观察到的值相差约50MHz,最终也导致了时间计算出现误差。

由于TSC校准仅在系统引导时发生,因此该问题只能在重新引导计算节点之后发生。以前没有症状的节点可能在重新引导之后突然开始出现问题,若要确定是否命中此错误,可以通过检查引导日志来识别TSC工作是否有问题,正常工作的服务器将在/var/log/dmesg日志中显示正在校准的TSC,信息如下所示。

#  fgrep clock var/log/dmesg

hpet  clockevent registered

Switching  to clocksource hpet

Refined  TSC clocksource calibration: 2893.028 MHz.

Switching  to clocksource tsc

rtc_cmos  00:06: setting system clock to 2013-07-02 11:15:06 UTC (1372763706)

 

故障原因及解决方案:

检查了该主机的dmesg日志,未发现硬件缺陷,最终手动重新从NTP服务器同步了系统时间,同时删除NTP客户端配置的drift文件,并重启NTP服务,命令如下所示。

#  $GI_HOME/bin/crsctl stop crs

#  service ntpd stop

#  rm /var/lib/ntp/drift

#  ntpdate -u <ntp server>

#  service ntpd start

#  $GI_HOME/bin/crsctl start crs


文章转载自Oracle一体机用户组,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论