tomcat启动慢的原因分析
2016-06-29 00:00
288 查看
摘要: 熵池阻塞导致tomcat启动非常慢
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
stackoverflow关于该问题的一些解答:
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
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
stackoverflow关于该问题的一些解答:
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
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- i-jetty环境搭配与编译
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 实现单Tomcat多Server配置
- 生产环境下的Tomcat配置
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- Linux部署Tomcat服务器
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器