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

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

贡献者:

KB小秘书

 · 

更新时间:2019-12-02 11:14:31

提示: 这是一篇由阿里云ACE开发者(Alibaba Cloud Engineer)贡献,针对特定用户问题发布的文章。文档的内容以原稿呈现,阿里云对于文档内容不做任何形式的承诺。阿里云有权在未经通知的情形下对文档内容做出任何形式的修改。

问题描述

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
  • 201

    发布KB

  • 651

    回答问题

  • 10

    粉丝数