有两种解决办法:
1)在Tomcat环境中解决
可以通过配置JRE使用非阻塞的Entropy Source。
在catalina.sh中加入这么一行: -Djava.security.egd=file:/dev/./urandom 即可。
加入后再启动Tomcat,整个启动耗时下降到Server startup in 2912 ms。
2)在JVM环境中解决
打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容:
securerandom.source=file:/dev/urandom
替换成
securerandom.source=file:/dev/./urandom
上面仅仅解决了在JVM中的问题,其实Nginx等应用也有可能会遇到这样的郁闷问题。还有第三种方法:
以Centos7为例,
yum install rngd-tools安装rngd服务(熵服务)
systemctl start rngd启动服务
如果你的CPU不支持DRNG特性或者像我一样使用虚拟机,可以使用/dev/unrandom来模拟。
cp /usr/lib/systemd/system/rngd.service /etc/systemd/system
vim /etc/systemd/system/rngd.service service
设置ExecStart=/sbin/rngd -f -r /dev/urandom
systemctl daemon-reload重新载入服务
systemctl restart rngd重启服务