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

 

转载于:https://my.oschina.net/110NotFound/blog/702903

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值