美文网首页
tomcat 启动慢的解决方法

tomcat 启动慢的解决方法

作者: Ze_phyr | 来源:发表于2018-09-04 11:24 被阅读10次

    Tomcat 7/8 都使用 org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom 类产生安全随机类 SecureRandom 的实例作为会话 ID

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

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

    Linux 中的随机数可以从两个特殊的文件中产生,一个是 /dev/urandom,另外一个是 /dev/random。

    /dev/urandom 和 /dev/random 这两种不同的文件,后者在不能产生新的随机数时会阻塞程序,而前者不会,当然产生的随机数效果就不太好了。

    SecureRandom generateSeed 使用 /dev/random 生成种子。/dev/random 是一个阻塞数字生成器,如果它没有足够的随机数据提供,它就一直等,直到根据熵池产生新的随机字节之后才返回,这迫使 JVM 等待。所以使用 /dev/random 比使用 /dev/urandom 产生大量随机数的速度要慢。

    解决方法:

    1. 在Tomcat环境中解决:

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

    在 catalina.sh 中加入这么一行:-Djava.security.egd=file:/dev/./urandom 即可。

    2. 在 JVM 环境中解决:

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

    securerandom.source=file:/dev/random

    替换成:

    securerandom.source=file:/dev/./urandom

    这里值为何要在 dev 和 random 之间加一个点呢?是因为一个 JDK 的 bug,有人反馈即使对 securerandom.source 设置为 /dev/urandom 它也仍然使用的 /dev/random,有人提供了变通的解决方法,其中一个变通的做法是对 securerandom.source 设置为 /dev/./urandom 才行。也有人评论说这个不是 bug,是有意为之。

    相关文章

      网友评论

          本文标题:tomcat 启动慢的解决方法

          本文链接:https://www.haomeiwen.com/subject/ngcgwftx.html