桌面云虚拟机时间缓慢变慢问题

发布时间:  2015-03-05 浏览次数:  557 下载次数:  0
问题描述
用户反馈虚拟机中系统时间比正常时间要慢几分钟。如果虚拟机比DDC服务器时间慢超过5分钟,就可能会无法登陆。
处理过程
因为这个涉及到底层虚拟化的bug,目前没有办法完全解决。可以通过如下方法规避。 首先说明一下操作系统时间同步机制,用户虚拟机都是加域的,目前都是和域同步时间,具体是多长时间同步一次呢?这个取决于如下的注册表值:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Config]
"MinPollInterval"=dword:0000000a
"MaxPollInterval"=dword:0000000f

以上注册表值是十进制,a代表10,f代表15,默认是如上的设置。
最小间隔是2的10次方,也就是1024秒,最大间隔是2的15次方,也就是32768秒(约9小时)。
也就是说,操作系统重启之后,会马上和域同步一次时间,然后间隔2的10次方同步一次,再然后间隔2的11次方同步一次。。。。直至到2的15次方秒同步一次,以后就按照每2的15次方同步一次

再回到问题,如果按照默认设置来同步时间,如果比较长时间(比如超过2小时)才同步一次,那么虚拟机和DDC时间相差会比较远,导致用户无法登陆。所以我们只需让虚拟机的时间同步频率增加。具体频率设置多少,可根据虚拟机时间慢的速度来决定,频率也不宜特高,保证虚拟机和DDC的时间差不会超过5分钟即可。

比如如果每分钟慢6秒左右的话,可以设置参数如下:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Config]
"MinPollInterval"=dword:00000006
"MaxPollInterval"=dword:0000000a


注册表修改后,重启计算机或者重启时钟服务生效(net stop w32time    net start w32time)
根因
经仔细观察分析,该用户虚拟机的时间,并不是突然跳变,而是缓慢变慢。变慢过程可见如下聊天记录时间点。其中liulijun账号所在电脑时间是正常的,pengjunfeng是时间变慢的。最初两者时间差31秒,半分钟后两者已经差了41秒,但是后来明显pengjunfeng的电脑系统时间慢了很多。

liulijun 00166845(l00166845) 2012-11-22 10:59:54

pengjunfeng 00101227(p00101227) 2012-11-22 10:59:23
  [自动回复]您好,我现在有事不在,一会再跟您联系。
liulijun 00166845(l00166845) 2012-11-22 10:59:55

pengjunfeng 00101227(p00101227) 2012-11-22 10:59:23
  [自动回复]您好,我现在有事不在,一会再跟您联系。
liulijun 00166845(l00166845) 2012-11-22 11:00:01

pengjunfeng 00101227(p00101227) 2012-11-22 10:59:28
  [自动回复]您好,我现在有事不在,一会再跟您联系。
liulijun 00166845(l00166845) 2012-11-22 11:00:09

pengjunfeng 00101227(p00101227) 2012-11-22 10:59:33
  [自动回复]您好,我现在有事不在,一会再跟您联系。
liulijun 00166845(l00166845) 2012-11-22 11:00:22

pengjunfeng 00101227(p00101227) 2012-11-22 10:59:42
  [自动回复]您好,我现在有事不在,一会再跟您联系。
liulijun 00166845(l00166845) 2012-11-22 11:00:23

pengjunfeng 00101227(p00101227) 2012-11-22 10:59:43
  [自动回复]您好,我现在有事不在,一会再跟您联系。
liulijun 00166845(l00166845) 2012-11-22 11:00:24

pengjunfeng 00101227(p00101227) 2012-11-22 10:59:43
  [自动回复]您好,我现在有事不在,一会再跟您联系。


根因分析:用户虚拟机中,使用了java程序,并且在java中,使用了一个API函数在调整时钟分辨率,这个机制和虚拟化之间存在冲突,导致时间不断变慢。如果结束java进程,时间会正常。

建议与总结
该问题涉及到xen时间虚拟化架构,需要在xen4.3中重构时间虚拟化架构才能完全解决。目前现网问题都只能通过调整时钟同步频率来规避。
虚拟机中有程序或者进程调用了调整时钟分辨率函数时,容易导致该问题产生。

END