在一次啟動tomcat過程中,長時間卡在Deploying web application directory處,經過五分鐘tomcat才啟動成功
原因
Tocmat的Session ID是通過SHA1算法計算得到的,計算Session ID的時候必須有一個密鑰。為了提高安全性Tomcat在啟動的時候回通過随機生成一個密鑰。
tomcat預設是通過/dev/random來産生随機數密玥。/dev/random會根據噪音産生随機數,如果噪音不夠它就會阻塞。Linux是通過I/O,鍵盤終端、記憶體使用量、CPU使用率等方式來收集噪音的,如果噪音不夠生成随機數的時候就會被阻塞。
解決方案
增大/dev/random的熵池。問題的原因是由于熵池不夠大,是以增大它是最徹底的方法。
檢視随機密玥生成速度
watch -n 1 cat /proc/sys/kernel/random/entropy_avail
在沒有增大熵池時,速度隻有個位數,是以造成tomcat啟動阻塞
解決辦法
以Centos7為例
- 安裝rngd服務(熵服務)
yum install rngd-tools 或者
yum install rng-tools
- 修改配置參數
//啟動服務
systemctl start rngd
//複制
cp /usr/lib/systemd/system/rngd.service /etc/systemd/system
//編輯
vim /etc/systemd/system/rngd.service
//修改内容
ExecStart=/sbin/rngd -f -r /dev/urandom
- 重新開機服務
//重新載入服務
systemctl daemon-reload
//重新開機服務
systemctl restart rngd
- 檢視随機數生成速度,可以看到速度基本在3000左右,再次重新開機tomcat不再出現阻塞現象
watch -n 1 cat /proc/sys/kernel/random/entropy_avail