zoukankan      html  css  js  c++  java
  • [转] tomcat 7/8 启动非常慢的解决方法

    在日志中发现启动慢的地方:

    2016-11-14 09:31:30.522 [localhost-startStop-1] INFO  o.s.c.s.DefaultLifecycleProcessor - Starting beans in phase 2147483647
    2016-11-14 09:31:30.556 [localhost-startStop-1] INFO  o.s.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 12902 ms
    2016-11-14 09:32:33.146 [localhost-startStop-1] INFO  o.a.c.util.SessionIdGeneratorBase - Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [62,587] milliseconds.
    2016-11-14 09:32:33.214 [localhost-startStop-1] INFO  o.s.web.servlet.DispatcherServlet - FrameworkServlet 'DispatcherServlet': initialization started

    原因:

    Tomcat 7/8都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom类产生安全随机类SecureRandom的实例作为会话ID,这里花去了62秒,也即接近1分钟,当然有时花费时间更长,达到5-10分钟。

    SHA1PRNG算法是基于SHA-1算法实现且保密性较强的伪随机数生成器。

    在SHA1PRNG中,有一个种子产生器,它根据配置执行各种操作。

    1)如果Java.security.egd 属性或securerandom.source属性指定的是”file:/dev/random”或”file:/dev/urandom”,那么JVM 会使用本地种子产生器NativeSeedGenerator,它会调用super()方法,即调用 SeedGenerator.URLSeedGenerator(/dev/random)方法进行初始化。

    2)如果java.security.egd属性或securerandom.source属性指定的是其它已存在的URL,那么会调用SeedGenerator.URLSeedGenerator(url)方法进行初始化。

    这就是为什么我们设置值为”file:///dev/urandom”或者值为”file:/./dev/random”都会起作用的原因。

    在这个实现中,产生器会评估熵池(entropy pool)中的噪声数量。随机数是从熵池中进行创建的。当读操作时,/dev/random设备会只返回熵池中噪声的随机字节。/dev/random非 常适合那些需要非常高质量随机性的场景,比如一次性的支付或生成密钥的场景。

    当熵池为空时,来自/dev/random的读操作将被阻塞,直到熵池收集到足够的环境噪声数据。这么做的目的是成为一个密码安全的伪随机数发生器,熵池要有尽可能大的输出。对于生成高质量的加密密钥或者是需要长期保护的场景,一定要这么做。

    那么什么是环境噪声?

    随机数产生器会手机来自设备驱动器和其它源的环境噪声数据,并放入熵池中。产生器会评估熵池中的噪声数据的数量。当熵池为空时,这个噪声数据的收集是比较花时间的。这就意味着,Tomcat在生产环境中使用熵池时,会被阻塞较长的时间。

    解决:

    有两种解决办法:

    1)在Tomcat环境中解决

    可以通过配置JRE使用非阻塞的Entropy Source。

    在catalina.sh中加入这么一行:

    JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"

    即可。

    加入后再启动Tomcat,整个启动耗时迅速下降。

    2)在JVM环境中解决

    打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容:

    securerandom.source=file:/dev/urandom

    替换成

    securerandom.source=file:/dev/./urandom
  • 相关阅读:
    Bootstrap 2.2.2 的新特性
    Apache POI 3.9 发布,性能显著提升
    SQL Relay 0.48 发布,数据库中继器
    ProjectForge 4.2.0 发布,项目管理系统
    红帽企业 Linux 发布 6.4 Beta 版本
    红薯 快速的 MySQL 本地和远程密码破解
    MariaDB 宣布成立基金会
    Percona XtraBackup 2.0.4 发布
    Rocks 6.1 发布,光盘机群解决方案
    精通Servlet研究,HttpServlet的实现追究
  • 原文地址:https://www.cnblogs.com/raphael5200/p/6844510.html
Copyright © 2011-2022 走看看