tomcat啓動太慢耗時很長的問題

tomcat啓動太慢耗時很長的問題

tomcat啓動很長時間,tomcat輸出日誌如下:

INFO [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [142,478] milliseconds.

最終解決問題的辦法:

方法1:修改JVM參數:

vim $JAVA_HOME/jre/lib/security/java.security

修改內容:

#securerandom.source=file:/dev/random #修改前
securerandom.source=file:/dev/./urandom #修改後,注意"u"

方法2:修改Tomcat啓動參數:

在catalina.sh中加入這麼一行:-Djava.security.egd=file:/dev/./urandom 即可。重啓tomcat啓動速度變快。

詳細原因:

tomcat7/8都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom類產生安全隨機類SecureRandom的實例作爲會話ID。
SHA1 PRNG算法是基於SHA-1算法實現的、保密性較強的僞隨機數生成器。算法中有一個種子生成器,它根據配置執行各種操作。
Linux中的隨機數可以從兩個特殊的文件中產生:

/dev/urandom:非阻塞的隨機數產生器(unlocked),他會反覆使用熵池中的數據來產生僞隨機數,如果不能產生新的隨機數時,不會阻塞。因此隨機數產生效果不太好。

/dev/random:阻塞隨機數產生器(locked),他會反覆使用熵池中的數據來產生僞隨機數,如果不能產生新的隨機數時,會阻塞,直到能產生新的隨機數才返回。因此隨機效果好。

其生成隨機數的原理是利用當前系統的熵池來計算出固定一定數量的隨機比特,然後將這些比特作爲字節流返回。熵池就是當前系統的環境噪音,熵指的是一個系統的混亂程度,系統噪音可以通過很多參數來評估,如內存的使用,文件的使用量,不同類型的進程數量等等。如果當前環境噪音變化的不是很劇烈或者當前環境噪音很小,比如剛開機的時候,而當前需要大量的隨機比特,這時產生的隨機數的隨機效果就不太好。

因此:使用/dev/random比使用/dev/urandom產生大量隨機數的速度要慢,但隨機數效果要好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章