【发布时间】:2015-11-13 20:58:06
【问题描述】:
场景
我们有一个用 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
【问题讨论】:
-
尚不清楚时间漂移如何直接导致您报告的时间戳不正确。在 VM 上运行 + 时间漂移可能会触发您的应用程序中的问题(可能是竞争条件),这表现为日志问题。
标签: java time virtual-machine virtualization drift