有几台服务器,一台是centos6.5的,一台是centos7.2的,同样的tomcat配置,同样的jdk,同样的war包,centos6.5上启动项目只要十几秒,centos7.2启动却要两百秒,相差十多倍。苦思冥想,没找到原因,只剩机器本身配置问题.
centos6.5的是16G内存的
centos7.2是8G内存的
但各自tomcat分配的内存是够的,所以不可能是机器内存的问题,对比tomcat启动日志如下 :
centos6.5上如下:
centos7.2上如下:
对比日志发现多了一个过程
INFO [org.apache.juli.logging.DirectJDKLog:183] o.a.c.util.SessionIdGeneratorBase - Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [203,339] milliseconds
这个过程耗时203秒,这个问题在centos6.5那台机器上不存在,在网上搜得解决方法,在tomcat下/bin/catalina.sh中的JAVA_OPTS上增加
-Djava.security.egd=file:/dev/./urandom
重新启动,项目启动完成时间13秒。
在这篇文章中介绍了两种方法 http://knight-black-bob.iteye.com/blog/2375133 ,亲测可行。
修改jdk下的文件$JAVA_PATH/jre/lib/security/java.security
securerandom.source=file:/dev/urandom
替换成
securerandom.source=file:/dev/./urandom
此方法也可行。