1. 问题分析
观察Tomcat日志,发现主要初始化Session缓慢。通过搜索了解到Tomcat的SessionID是通过SHA1PRNG算法计算得到的,SHA1算法需要在 Tomcat启动的时候随机生成一个,生成是使用了Linux 随机函数生成器/dev/random,读取它相当于生成随机数字。搜索/dev/random,大概了解了:/dev/random会根据熵池产生随机数,如果熵池不够它就会阻塞。如果熵池不够生成随机数的时候就会被阻塞。
2. 解决问题
简单的有两种方式解决:
a.增大/dev/random的熵池;熵池不够大,那就增大它。
安装熵服务yum install rng-tools
启动熵服务systemctl start rngd
也可以使用/dev/unrandom来模拟:
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
b.使用伪随机函数生成器/dev/unrandom
/dev/urandom并不是真正的随机行为,只是重复率较低
通过修改Tomcat启动文件 -Djava.security.egd=file:/dev/urandom
通过修改JRE中的java.security文件 securerandom.source=file:/dev/urandom