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 rngdb.使用伪随机函数生成器/dev/unrandom
/dev/urandom并不是真正的随机行为,只是重复率较低 通过修改Tomcat启动文件 -Djava.security.egd=file:/dev/urandom 通过修改JRE中的java.security文件 securerandom.source=file:/dev/urandom