Java Webアプリケーションがあります。これはJARから実行され、組み込みTomcatを起動し、SpringBootを使用しています。
問題は、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秒で起動しています。仮想化システムの場合。両方のOSはUbuntu15.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
などのランダムエントロピージェネレーターをインストールする必要がある場合があります。
VMには、エントロピーの収集に問題があります。
仮想サーバーはエミュレートされた環境で実行されており、「実際の」ハードウェアへのアクセスはほとんどありません。従来のコンピューターがハードウェアから取得するランダムデータは、エミュレートされた仮想ハードウェアでは発生しないため、エントロピーの主要なソースは存在しません。
これにより、少なくとも、初めて使用するときのパフォーマンスが向上することが期待されます。