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 應用程序。
如果您的應用程序使用 SecureRandom,您可能需要安裝一個隨機熵生成器,
haveged
以便為初始種子提供足夠的熵。虛擬機在收集熵時遇到問題。
虛擬伺服器在模擬環境中執行,幾乎無法訪問“真實”硬體。傳統電腦從其硬體中獲取的隨機數據不會發生在模擬虛擬硬體中,因此熵的主要來源不存在。
這至少有望在第一次使用時提高性能。