Tomcat服务启动非常缓慢,查看Tomcat服务日志,日志信息类似如下。

org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [406,732] milliseconds.

系统显示类似如下。

SecureRandom这个JRE的工具类存在问题。SecureRandom generateSeed慢是因为Tomcat7、Tomcat8服务都是使用 org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom 类产生安全随机类SecureRandom的实例作为会话ID

本文提供以下两种解决方案。

在Tomcat环境中解决

  • 可以通过配置JRE使用非阻塞的Entropy Source,在catalina.sh文件中添加如下内容。
    -Djava.security.egd=file:/dev/./urandom

    添加内容完成后重启Tomcat服务,查看Tomcat服务启动日志,确认启动耗时下降。

    在JVM环境中解决

  • 打开 $JAVA_PATH/jre/lib/security/java.security 文件。
  • 在文件中找到如下内容。
    securerandom.source=file:/dev/urandom

    将内容替换为如下内容。

    securerandom.source=file:/dev/./urandom
  • 云服务器 ECS
  •