你的tomcat啟動(dòng)慢嗎?

原來tomcat啟動(dòng)很快,突然有一天,不知道什么原因,tomcat啟動(dòng)非常慢,要花5~6分鐘,甚至更久。

Apr 24, 2018 10:26:01 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://www.springframework.org/tags is already defined
Apr 24, 2018 10:26:01 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://www.springframework.org/tags/form is already defined
Configuring Shiro ...
Shiro Configured
Apr 24, 2018 10:31:42 PM org.apache.catalina.util.SessionIdGenerator createSecureRandom
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [308,521] milliseconds.
Apr 24, 2018 10:31:43 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /var/lib/tomcat7/webapps/ROOT
Apr 24, 2018 10:31:44 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-80"]
Apr 24, 2018 10:31:44 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 361981 ms

以下是在網(wǎng)上找到的解決方案

解決方法

  1. 在catalina.sh,JAVA_OPTS參數(shù)中加上
-Djava.security.egd=file:/dev/./urandom
  1. 找到$JAVA_PATH/jre/lib/security/java.security這個(gè)文件,將securerandom.source值替換為file:/dev/./urandom
securerandom.source=file:/dev/./urandom

tomcat變慢的原因

Tomcat 7/8都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom類產(chǎn)生安全隨機(jī)類SecureRandom的實(shí)例作為會(huì)話ID,啟動(dòng)的時(shí)間就耗費(fèi)在這里了。

  1. 如果Java.security.egd 屬性或securerandom.source屬性指定的是”file:/dev/random”或”file:/dev/urandom”,那么JVM 會(huì)使用本地種子產(chǎn)生器NativeSeedGenerator,它會(huì)調(diào)用super()方法,即調(diào)用 SeedGenerator.URLSeedGenerator(/dev/random)方法進(jìn)行初始化。

  2. 如果java.security.egd屬性或securerandom.source屬性指定的是其它已存在的URL,那么會(huì)調(diào)用SeedGenerator.URLSeedGenerator(url)方法進(jìn)行初始化。

在產(chǎn)生回話id時(shí),產(chǎn)生器會(huì)評估熵池(entropy pool)中的噪聲數(shù)量。隨機(jī)數(shù)是從熵池中進(jìn)行創(chuàng)建的。

如果將熵池設(shè)置為/dev/random或/dev/urandom,會(huì)直接返回熵池中噪聲的隨機(jī)字節(jié)。

當(dāng)熵池為空時(shí),來自/dev/random的讀操作將被阻塞,直到熵池收集到足夠的環(huán)境噪聲數(shù)據(jù)。這么做的目的是成為一個(gè)密碼安全的偽隨機(jī)數(shù)發(fā)生器,熵池要有盡可能大的輸出。

什么是環(huán)境噪聲?

隨機(jī)數(shù)產(chǎn)生器會(huì)收集來自設(shè)備驅(qū)動(dòng)器和其它源的環(huán)境噪聲數(shù)據(jù),并放入熵池中。產(chǎn)生器會(huì)評估熵池中的噪聲數(shù)據(jù)的數(shù)量。當(dāng)熵池為空時(shí),這個(gè)噪聲數(shù)據(jù)的收集是比較花時(shí)間的。這就意味著,Tomcat在生產(chǎn)環(huán)境中使用熵池時(shí),會(huì)被阻塞較長的時(shí)間。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容