1.啟動慢錯誤提示 31-May-2017 13:50:32.127 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.14 31-May-2017 13:52:32.356 INFO [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [119,978] milliseconds.
2.原因
Tomcat 7/8都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom類産生安全随機類SecureRandom的執行個體作為會話ID,這裡花去了342秒,也即接近6分鐘。
随機數産生器會手機來自裝置驅動器和其它源的環境噪聲資料,并放入熵池中。産生器會評估熵池中的噪聲資料的數量。當熵池為空時,這個噪聲資料的收集是比較花時間的。這就意味着,Tomcat在生産環境中使用熵池時,會被阻塞較長的時間。
3.解決方法3種
①:推薦:通過rng-tools自動補充熵池 執行指令: yum -y install rng-tools echo 'EXTRAOPTIONS="--rng-device /dev/urandom"' >/etc/sysconfig/rngd service rngd start chkconfig rngd on chkconfig --list rngd
②:在Tomcat環境中解決
可以通過配置JRE使用非阻塞的Entropy Source。
在catalina.sh中加入這麼一行:-Djava.security.egd=file:/dev/./urandom 即可。
加入後再啟動Tomcat,整個啟動耗時下降到Server startup in 2912 ms。
③:在JVM環境中解決
打開$JAVA_PATH/jre/lib/security/java.security這個檔案,找到下面的内容: securerandom.source=file:/dev/urandom
替換成 securerandom.source=file:/dev/./urandom