VM环境下的Linux平台上,Java程序启动速度可能会很慢,表现为启动过程中日志突然停止输出,暂停执行。根据具体的环境,可能稍等会儿后,一切恢复正常,日志开始继续输出,程序继续执行,也可能等待很长的时间也没有结果。
导致该问题的原因是Java程序对Linux平台/dev/random
的调用,该调用为阻塞调用,所以如果没有足够的entropy
让该调用返回,Java程序将会一直wait
。
解决方法:
- 安装haveged,Ubuntu上,可以执行
apt-get install haveged
- 改用非阻塞的
/dev/urandom
可以通过启动JVM时带参数修改
-DJava.security.egd=file:/dev/./urandom
或者
直接修改java.security
配置,把$JAVA_PATH/jre/lib/security/java.security
配置文件中的securerandom.source
内容修改为
securerandom.source=file:/dev/./urandom
参考:what-do-i-need-to-configure-to-make-sure-my-software-uses-dev-urandom