我有一个 ESXI-Server 和一个 OpenSuse 10.3 发行版,它们作为客户系统在其上运行。在使用 Thread.sleep() 来避免占用 100% CPU 的 Java (6_17) 应用程序中,我注意到它有时永远不会再次唤醒,并且应用程序处于昏迷状态。我在进入睡眠状态之前开始记录,发现时钟向前跳了一个小时零几分钟,而不久之后从其他线程记录的时间又产生了真实时间。
发布了几个 Java 错误,这些错误都归结于 Linux 使用错误的时钟进入睡眠状态。还有一些虚拟机时间跳跃问题。有人见过类似的东西吗,所以我知道我应该从哪里开始搜索?
甚至 Object.wait() 也坏了,所以我甚至不能干净利落地关闭我的应用程序。调用 Thread.sleep() 是否会经常触发硬件的多次更新?
答案1
您可以尝试以下几件事:
- 确保您已安装 vmware 工具。
- 阅读VMware 虚拟机中的计时文档。
- 阅读知识库文章:Linux 客户机的计时最佳实践这具有特定于 SUSE 的设置。
就我个人而言,我发现 sleep 可以可靠地与 java (1.6.0_16) 配合使用,并使用 VMWare 工具提供时间同步,但那是在 Redhat 和 Solaris VM 上,而不是 Suse 上。上面的 2 个文档应该会有所帮助。