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还是其他程序,都能解决问题