springboot启动慢解决方法

jdk的配置文件中,使用securerandom.source设置了熵源:java

cat /usr/java/jdk1.8.0_121/jre/lib/security/java.security

securerandom.source=file:/dev/random

能够看到默认值是:/dev/random
因此程序启动后SecureRandom类会读取/dev/random以获取随机序列,这是一个同步操做。当熵池(entropy pool) 中没有足够的熵时,读取/dev/random就会形成阻塞,直到收集到了足够的熵,程序才会继续往下进行。
(关于什么是/dev/random,能够查看 wiki的介绍app


解决方法是修改为非阻塞的熵源/dev/urandom
能够修改java.security文件中的securerandom.source值,也能够使用参数java.security.egddom

java -jar app.jar -Djava.security.egd=file:/dev/./urandom

至于为何是/dev/./urandom,而不是/dev/urandom,这源于java的一个bug。大意是/dev/urandom在某些状况下可能仍是最终会转换成调用/dev/random。因此为了保险起见,仍是使用/dev/./urandom吧!code

相关文章
相关标签/搜索