SecureRandom导致Tomcat服务启动缓慢的处理方法

问题描述

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环境中解决

  1. 可以通过配置JRE使用非阻塞的Entropy Source,在catalina.sh文件中添加如下内容。
    -Djava.security.egd=file:/dev/./urandom
  2. 添加内容完成后重启Tomcat服务,查看Tomcat服务启动日志,确认启动耗时下降。

 

在JVM环境中解决

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

    将内容替换为如下内容。

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

 

适用于

  • 云服务器 ECS