设想
我们有一个用 Java 编写的应用程序。它曾经在物理机上流畅运行。已做出迁移到虚拟机的决定。现在,该应用程序在日志的时间戳中经常出现不准确的情况。
插图
虚拟化之前
时间戳 | 来电者 | 信息 00:00:01.735 | 富 | 下载东西 00:00:05.123 | 富 | 下载了一些东西 00:00:05.123 | 酒吧 | 分析某事 ... 00:00:08.990 | 富 | 结尾
如您所见,时间戳值在物理机上不断增长。
虚拟化之后
时间戳 | 来电者 | 信息 00:00:01.735 | 富 | 下载东西 00:00:05.123 | 酒吧 | 下载了一些东西 00:00:05.123 | 巴兹 | 分析某事 ... 00:00:04.485 | 富 | 结尾
现在,日志表明该过程在下载期间结束。
采取的解决方案
我们已将 VM 与 NTP 服务器同步。这个问题消失了几天。现在又回来了。
问题
- 我们应该更频繁地同步吗?
- 我们能想象以某种方式覆盖
System.currentTimeMillis()
吗? - 我们是否应该根据检测到的时间漂移来更改日志中的时间戳值?
- 如何解决虚拟机时间跟踪丢失问题?
主机操作系统: RHEL 6.5
来宾操作系统: RHEL 5.4
虚拟化平台: RHEV 3.4