tomcat版本:8.5.20
公司項目服務遷移到另一台服務器,原本正常啟動的項目,在另一台服務器(阿里雲CentOS7)tomcat啟動很慢,通常幾百秒啟動。查看日志可以發現
時間花在了生成session ID上。
這是由於Tocmat的Session ID的生成主要通過java.security.SecureRandom
生成隨機數來實現,隨機數算法使用的是SHA1PRNG,由於熵池為空,導致阻塞
網上大部分解決辦法是:
通過修改Tomcat啟動文件-Djava.security.egd=file:/dev/urandom
通過修改JRE中的java.security文件securerandom.source=file:/dev/urandom
還有種解決方法我覺得比較好
參考:https://www.jianshu.com/p/576d356dc163
增大/dev/random的熵池。問題的原因是由於熵池不夠大,所以增大它是最徹底的方法。通過cat /proc/sys/kernel/random/entropy_avail
我們可以查看現在的熵池大小;我們需要找到一種方式來提高這個值就行了。如果你的CPU帶有DRNG特性,可以充分利用硬件來提高熵池產生的速度 。通過cat /proc/cpuinfo | grep rdrand
可以查看自己的CPU是否支持,一般來說Intel的Ivy_Bridge架構的CPU都支持(i3、i5需要注意是否采用該種架構,i7和xeon基本上都支持);AMD的CPU在2015年以后生成的都支持。(如果你是虛擬機需要開啟額外的參數)。如果你的硬件不支持,也沒有關系,我們可以讓/dev/unrandom來做“熵源”。以Centos7為例,
yum install rngd-tools
或者yum install rng-tools
安裝rngd服務(熵服務)
systemctl start rngd
啟動服務
可以將該服務設為開機自動啟動,這樣不光對tomcat還是其他程序,都能解決問題