tomcat8启动慢
tomcat8在linux下安裝使用一段時間后啟動非常慢,6分鐘左右。
原因是一個隨機數(shù)生成參數(shù)導致的。
處理如下:
修改catalina.sh?.配置JRE使用非阻塞的Entropy Source
if [ -z "$JSSE_OPTS" ] ; then
? JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
fi
JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS -Djava.security.egd=file:/dev/./urandom"
紅色部分是增加的.
Tomcat 8熵池阻塞變慢詳解
作者:chszs,轉載需注明。博客主頁:http://blog.csdn.net/chszs
Tomcat 8啟動很慢,且日志上無任何錯誤,在日志中查看到如下信息:
Log4j:[2015-10-29 15:47:11] INFO ReadProperty:172 - Loading properties file from class path resource [resources/jdbc.properties] Log4j:[2015-10-29 15:47:11] INFO ReadProperty:172 - Loading properties file from class path resource [resources/common.properties] 29-Oct-2015 15:52:53.587 INFO [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [342,445] milliseconds.原因
Tomcat 7/8都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom類產(chǎn)生安全隨機類SecureRandom的實例作為會話ID,這里花去了342秒,也即接近6分鐘。
SHA1PRNG算法是基于SHA-1算法實現(xiàn)且保密性較強的偽隨機數(shù)生成器。
在SHA1PRNG中,有一個種子產(chǎn)生器,它根據(jù)配置執(zhí)行各種操作。
1)如果Java.security.egd屬性或securerandom.source屬性指定的是”file:/dev/random”或”file:/dev/urandom”,那么JVM會使用本地種子產(chǎn)生器NativeSeedGenerator,它會調用super()方法,即調用SeedGenerator.URLSeedGenerator(/dev/random)方法進行初始化。
2)如果java.security.egd屬性或securerandom.source屬性指定的是其它已存在的URL,那么會調用SeedGenerator.URLSeedGenerator(url)方法進行初始化。
這就是為什么我們設置值為”file:///dev/urandom”或者值為”file:/./dev/random”都會起作用的原因。
在這個實現(xiàn)中,產(chǎn)生器會評估熵池(entropy pool)中的噪聲數(shù)量。隨機數(shù)是從熵池中進行創(chuàng)建的。當讀操作時,/dev/random設備會只返回熵池中噪聲的隨機字節(jié)。/dev/random非常適合那些需要非常高質量隨機性的場景,比如一次性的支付或生成密鑰的場景。
當熵池為空時,來自/dev/random的讀操作將被阻塞,直到熵池收集到足夠的環(huán)境噪聲數(shù)據(jù)。這么做的目的是成為一個密碼安全的偽隨機數(shù)發(fā)生器,熵池要有盡可能大的輸出。對于生成高質量的加密密鑰或者是需要長期保護的場景,一定要這么做。
那么什么是環(huán)境噪聲?
隨機數(shù)產(chǎn)生器會手機來自設備驅動器和其它源的環(huán)境噪聲數(shù)據(jù),并放入熵池中。產(chǎn)生器會評估熵池中的噪聲數(shù)據(jù)的數(shù)量。當熵池為空時,這個噪聲數(shù)據(jù)的收集是比較花時間的。這就意味著,Tomcat在生產(chǎn)環(huán)境中使用熵池時,會被阻塞較長的時間。
解決
有兩種解決辦法:
1)在Tomcat環(huán)境中解決
可以通過配置JRE使用非阻塞的Entropy Source。
在catalina.sh中加入這么一行:-Djava.security.egd=file:/dev/./urandom 即可。
加入后再啟動Tomcat,整個啟動耗時下降到Server startup in 2912 ms。
2)在JVM環(huán)境中解決
打開$JAVA_PATH/jre/lib/security/java.security這個文件,找到下面的內容:
替換成
securerandom.source=file:/dev/./urandom 頂總結
以上是生活随笔為你收集整理的tomcat8启动慢的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Centos6.6下安装配置Redmin
- 下一篇: 在linux上使用yum安装JDK