原文如下:https://blog.youkuaiyun.com/upshi/article/details/54907464
有2种解决方案:
方法1:在Tomcat环境中:
可以通过配置JRE使用非阻塞的 Entropy Source:
在catalina.sh中加入这么一行:
-Djava.security.egd=file:/dev/./urandom
即可。
加入后再启动Tomcat,整个启动耗时下降到Server startup in 20130 ms。
这种方案是在修改随机数获取方式,那这里urandom是啥呢?
/dev/random的一个副本是/dev/urandom(“unblocked”,非阻塞的随机数发生器[4]),它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。 - - - wikipedia
方法2:在JVM环境中解决
打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容:
securerandom.source=file:/dev/random
替换成
securerandom.source=file:/dev/./urandom
另外,对于 JDK8中的SecureRandom.getInstanceStrong() ,也会有类似的问题。详见 http://hongjiang.info/java8-nativeprng-blocking/,解决方法如下
使用下面的调用
SecureRandom.getInstance("NativePRNGNonBlocking")
而不能使用如下带缺省参数的调用。
SecureRandom.getInstanceStrong()
本文介绍了解决Tomcat启动时因随机数生成导致的阻塞问题的两种方法。第一种是在Tomcat环境中配置JRE使用非阻塞的EntropySource;第二种是在JVM环境中修改随机数源配置。通过将随机数源从/dev/random更改为/dev/urandom,可以显著减少启动时间。
2756

被折叠的 条评论
为什么被折叠?



