雨翔河
首页
列表
关于
tomcat启动慢的原因分析
2016-06-29 12:41
Tomcat严重依赖SecureRandom这个类为它的session id或其它地方取得随机数值,这取决于你的JRE。 它有可能在tomcat启动时造成非常大的耗时,比如,在启动tomcat的时候,它耗时有时候会达到3分钟。 INFO: Creation of SecureRandom instance for session ID generation using \[SHA1PRNG\] took \[XXXXXXX\] milliseconds 要解决这个问题,可以通过配置JRE使用非阻塞的Entropy Source,在bin/catalina.sh中加入这么一行:-Djava.scurity.egd=file:/dev/./urandom。 或者通过修改jre来解决这个阻塞的问题: 打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容: securerandom.source=file:/dev/random 替换成 securerandom.source=file:/dev/urandom 问题的核心是指向随机密码生成器中,关于环境噪音采集部分的处理。所谓环境噪音,就是来自各个设备驱动与其它来源的二进制数据,也称之为熵。熵池则是存储这些噪音数据的地方。当熵池为空的时候,采用/dev/random会存在阻塞。但是,检查环境配置,安装的java是采用/dev/urandom进行处理。其模式是熵池为空时,非阻塞。很显然,还不止如此,从stackoverflow链接中可以找到一段描述,解释了为何jdk用了/dev/urandom,但是还是不生效。 随机数生成器,基于SHA1PRNG。而SHA1PRNG重度依赖高质量的种子,如果种子不够好,随机数结果将可被预测。因此开发人员需要确保/dev/random被用作熵的来源,即便JVM配置为使用/dev/urandom。所以切换熵源为/dev/urandom,也需要确保/dev/random有足够的熵。 关于这个问题在java.com里有这么类似的小插曲: [http://bugs.java.com/bugdatabase/view\_bug.do?bug\_id=6202721](http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6202721) stackoverflow关于该问题的一些解答: [http://stackoverflow.com/questions/26431922/tomcat7-starts-too-late-on-ubuntu-14-04-x64-digitalocean/26432537#26432537](http://stackoverflow.com/questions/26431922/tomcat7-starts-too-late-on-ubuntu-14-04-x64-digitalocean/26432537#26432537) 关于tomcat启动快的策略在apache的官方也有相应的文档有描述 [http://wiki.apache.org/tomcat/HowTo/FasterStartUp](http://wiki.apache.org/tomcat/HowTo/FasterStartUp)
类型:随笔
标签:tomcat,linux,java
Copyright © 雨翔河
我与我周旋久
独孤影
开源实验室