在本地开发环境,应用正常启动。
在CentOS测试环境,应用启动速度也是正常的。
但是在阿里云的生产环境,tomcat启动超级慢,并且在最终打印出来以下内容:
org.apache.catalina.util.SessionIdGenerator createSecureRandom INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [152,149] milliseconds.
152秒,这可以就是2分钟啊。并且如果多次启动,可能需要等待更久,有几次上线只是在启动时等待了5分钟多。
经过百度,发现是Tomcat 7/8使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom类产生安全随机类SecureRandom的实例作为会话ID时,由于堵塞,造成时间上的消耗。
解决方案如下,由于第一种需要修改catalina.sh,在生产环境没有尝试。而是采用的第二种的方式。
有两种解决办法:
1)在Tomcat环境中解决
可以通过配置JRE使用非阻塞的Entropy Source。
在catalina.sh中加入这么一行:-Djava.security.egd=file:/dev/./urandom 即可。
加入后再启动Tomcat,整个启动耗时下降到Server startup in 2912 ms。
2)【已验证】在JVM环境中解决
打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容:
securerandom.source=file:/dev/urandom
替换成
securerandom.source=file:/dev/./urandom
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
博文来源广泛,如原作者认为我侵犯知识产权,请尽快给我发邮件 359031282@qq.com联系,我将以第一时间删除相关内容。