今天将服务器tomcat7升级为tomcat8,但是在启动的时候非常慢,只跑了三个项目,启动耗时在3分钟左右。而在没升级tomcat之前,启动都在30秒内。
问题原因是tomcat在启动时会调用类的SecureRandom generateSeed()方法,它使用/dev/random生成种子。但是/dev/random是一个阻塞数字生成器,如果它没有足够的随机数据提供,它就一直等,这迫使JVM等待。
解决方法:
1、在tomcat层面解决:
在catalina.sh中添加:JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"。
2、在jvm层面上解决
打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容:
securerandom.source=file:/dev/urandom
替换成
securerandom.source=file:/dev/./urandom