Java 应用程序在虚拟服务器(KVM)中运行缓慢

Java 应用程序在虚拟服务器(KVM)中运行缓慢

我有一个 Java Web 应用程序,它从 JAR 运行,启动嵌入式 Tomcat 并使用 Spring Boot。

问题是它在 KVM 虚拟客户机中运行时运行非常慢。同一 JDK 中的同一应用程序(Java(TM) SE Runtime Environment (build 1.8.0_72-b15) Java HotSpot(TM) 64-Bit Server VM (build 25.72-b15, mixed mode)在裸机上启动需要 8 秒,但在虚拟化系统中启动则需要 40 秒。两个操作系统都是 Ubuntu 15.10(内核 4.2.0-27-generic)。这不仅是启动问题,应用程序对每个 HTTP 请求的响应也非常缓慢。

我尝试更改有关 SecureRandom 的 Java 设置,但没有任何改变。

-Djava.security.egd=file:///dev/urandom

虚拟客户中的 SecureRandom 和随机熵: https://security.stackexchange.com/questions/14386/what-do-i-need-to-configure-to-make-sure-my-software-uses-dev-urandom

https://stackoverflow.com/questions/137212/how-to-solve-performance-problem-with-java-securerandom

但它对我没有帮助。你还有其他建议吗?该怎么办?谢谢。

我的虚拟主机是一台新服务器,拥有充足的 RAM、SSD……所以我很确定没有硬件问题。我还运行了其他 KVM 虚拟客户端,完全没有问题。只有 Java 应用程序运行缓慢。

答案1

如果您的应用程序正在使用 SecureRandom,您可能需要安装一个随机熵生成器,haveged以便初始种子具有足够的熵。

虚拟机在收集熵方面存在问题。

虚拟服务器在模拟环境中运行,几乎无法访问“真实”硬件。传统计算机从硬件中获取的随机数据不会在模拟的虚拟硬件中发生,因此熵的主要来源不存在。

来源

这至少有望在第一次使用时提高性能。

相关内容