一个奇怪软件问题的解决——关于虚拟机中的时间同步

 有一台日常使用的Vmware虚拟机中跑着笔者个人写的一个网络程序,平时为了使用方便和保持完整的开发状态和桌面,虚拟机都是采取挂起方式关闭,下次使用再恢复到上次的工作环境,比较方便快捷,这样虚拟机一直使用正常。但有一天开始发现虚拟机的网络程序运行出现异常情况,从表面现象看,似乎这个问题和一个依赖于定时timer自动计算网络套接字收发数据的例程有关系,于是检查了代码并考虑可能是特殊网络情况造成的,相应调整了好几次代码逻辑以增强不同网络情况下的鲁棒性,一开始似乎问题得到解决,可是过了几天同样的Bug又再次出现,笔者颇感困惑,有点百思不得其解的感觉,暂时就先不再考虑解决方法了。就这样过了一段时间后,有一天灵机一动突然想到这个问题可能根本原因是虚拟机系统时间不准确导致的,而不是代码本身有Bug,仔细观察以后注意到虚拟机刚刚从挂起状态恢复的时候系统时间还会停留在前一天挂起的时间,而且等虚拟机网络自动联通以后,有一定几率要等比较长时间才会联网同步到当前准确时间(虚拟机中开启了Windows自动时间同步)。知道了根本原因,那么解决方法也很简单:就是让虚拟机时间在程序开始运行之前尽快同步,只需要在Vmware虚拟机菜单->设置->选项中vmware tools那里勾选上“将客户机时间与主机同步”然后确定保存,大致如下图:

vm-time-sync

至此这个表面上的软件问题得到圆满解决,这里简单记录一下,希望对遇到类似情况的网友有所帮助。


发表回复

邮箱地址不会被公开。 必填项已用*标注