シナリオ
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()
? - 検出された時間のずれに基づいて、ログのタイムスタンプ値を変更する必要がありますか?
- 仮想マシンのタイム トラッキング ロスの問題を解決するにはどうすればよいですか?
ホスト OS: RHEL 6.5
ゲスト OS: RHEL 5.4
仮想化プラットフォーム: RHEV 3.4