`
jahu
  • 浏览: 60900 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

tomcat因随机因子启动慢问题

    博客分类:
  • java
 
阅读更多

这段内容是转的。下面是自己的解析。

 

file:/dev/urandom

 

不知道,这个作者的jre是多少。

在dev目录下,只有 urandom与random文件。然后   /dev/./urandom 其实就等于 /dev/urandom

在jdk1.8的java.security 文件里面默认是 random,然后解决启动延迟需要  修改成   /dev/urandom

 

最大的坑来了,

如果你把

securerandom.source=file:/dev/urandom
那么所有的加密操作都失败了

tomcat启动时SessionIdGeneratorBase.createSecureRandom耗时5分钟的问题

 

通常情况下,tomcat启动只要2~3秒钟,突然有一天,tomcat启动非常慢,要花5~6分钟,查了很久,终于在这篇文章找到了解决方案,博主牛人啊。

原文参见:http://blog.csdn.net/chszs/article/details/49494701

 

Tomcat 8启动很慢,且日志上无任何错误,在日志中查看到如下信息:

Log4j:[2015-10-29 15:47:11]  INFO ReadProperty:172 - Loading properties file from class path resource [resources/jdbc.properties]
Log4j:[2015-10-29 15:47:11]  INFO ReadProperty:172 - Loading properties file from class path resource [resources/common.properties]
29-Oct-2015 15:52:53.587 INFO [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [342,445] milliseconds.

原因

Tomcat 7/8都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom类产生安全随机类SecureRandom的实例作为会话ID,这里花去了342秒,也即接近6分钟。

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中加入这么一行:-Djava.security.egd=file:/dev/./urandom 即可。

加入后再启动Tomcat,整个启动耗时下降到Server startup in 2912 ms。

2)在JVM环境中解决

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

securerandom.source=file:/dev/urandom

替换成

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

 

作者:Lave Zhang
出处:http://www.cnblogs.com/lavezhang/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

分享到:
评论

相关推荐

    Tomcat 启动慢

    ### Tomcat启动慢的原因及解决方法 #### 一、背景介绍 在生产环境中,Tomcat作为一款广泛使用的Java应用...只有全面地排查和优化,才能从根本上解决Tomcat启动慢的问题,确保生产环境中的应用能够高效稳定地运行。

    Tomcat重启后,首次访问很慢.md

    ### Tomcat重启后首次访问很慢的原因及其解决办法 #### 一、问题描述 在CentOS上部署了Tomcat应用后,用户反映每次重启Tomcat服务后,首次访问某个接口时响应速度非常缓慢,通常需要等待大约两分钟的时间才能完成...

    快速解决Tomcat启动慢的问题,超简单

    总结,通过理解Tomcat启动时的随机数生成机制,并通过设置`java.security.egd`属性来改变随机数源,我们可以有效地解决Tomcat启动慢的问题,提升服务的可用性和响应速度。同时,这也提醒我们在遇到类似问题时,应...

    tomcat设置开机自启动.docx

    Tomcat 设置开机自启动 Tomcat 是一款流行的开源 Web 服务器软件,广泛应用于企业级应用开发中。为了确保 Tomcat 服务器的稳定运行,设置开机自启动是非常必要的。下面将详细介绍 Tomcat 设置开机自启动的步骤和...

    java代码启动tomcat

    Java 代码启动 Tomcat 在 Java 中,使用 Tomcat 服务器来发布 Web 应用程序是一种常见的做法。下面,我们将详细介绍如何使用 Java 代码来启动 Tomcat 服务器,并实现远程控制 Tomcat。 标题: Java 代码启动 ...

    tomcat设置开机自启动介绍

    在IT领域,特别是对于Web应用服务器的管理与部署而言,Tomcat作为一个广泛使用的开源轻量级Web服务器,其开机自启动的配置是一项基础且重要的技能。以下是对如何设置Tomcat开机自启动的详细解析,旨在帮助系统管理员...

    快速解决Tomcat重新配置后启动慢的问题

    4. **系统资源限制**:如果服务器的CPU、内存或其他系统资源紧张,Tomcat启动时可能因等待资源而变慢。 针对上述情况,我们可以采取以下措施来解决Tomcat启动慢的问题: 1. **检查配置文件**:确保配置文件中的...

    tomcat 开机启动(Apache Tomcat开机后台启动_百度经验.mht)

    tomcat 开机启动,dos窗口去掉,tomcat 开机启动,dos窗口去掉

    centOS7设置Tomcat8开机启动

    在Linux系统中,尤其是CentOS 7,配置Apache Tomcat 8作为开机启动服务是确保服务器启动时自动运行Web应用程序的关键步骤。这个过程对于软件实施工程师来说非常重要,因为它可以简化维护工作,避免每次系统重启后...

    启动tomcat,Tomcat启动常见的问题

    启动tomcat,Tomcat启动常见的问题

    TOMCAT不能正常启动总结

    标题“TOMCAT不能正常启动总结”涉及到的是在部署和运行Apache Tomcat服务器时遇到的问题。Tomcat是一款广泛使用的开源Java应用服务器,主要用于运行Servlet和JSP应用。当Tomcat无法正常启动时,可能的原因多样,...

    centos设置tomcat开机自启动

    ### CentOS 设置 Tomcat 开机自启动 #### 一、前言 在生产环境中,为了确保应用服务器能够稳定运行,我们通常需要配置应用服务器在系统重启后自动启动。本篇文章将详细介绍如何在CentOS环境下配置Tomcat服务器实现...

    Tomcat 7 Windows中以Service方式启动配置启动参数

    #### 三、配置Tomcat启动参数的重要性 在Windows环境中以Service方式启动Tomcat时,默认的JVM参数设置往往较低,这可能导致在运行大型应用程序时遇到内存不足的问题,例如常见的`java.lang.OutOfMemoryError: Perm...

    tomcat6开机启动

    这里`Tomcat6`是服务名,`binPath`是Tomcat启动脚本的路径。 3. 设置服务启动类型,使其开机自动启动: ``` sc config Tomcat6 start= auto ``` 4. 启动服务: ``` net start Tomcat6 ``` **Linux/Unix系统...

    Tomcat开机自启动

    "Tomcat开机自启动" Tomcat开机自启动是指在 Linux 操作系统中,使 Tomcat 服务器在系统启动时自动启动的过程。下面将详细介绍 Tomcat 开机自启动的步骤和相关知识点。 一、基本概念 在开始之前,需要了解一些...

    tomcat启动不了问题处理

    ### tomcat启动不了问题处理 在IT领域,Tomcat服务器是一款非常流行的开源Web服务器,它主要用来部署Java Web应用程序。然而,在使用过程中,用户可能会遇到Tomcat无法启动的问题。本文将详细探讨导致Tomcat启动...

    Linux(CentOS7)安装Tomcat与设置Tomcat为开机启动项(tomcat8为例)

    在Linux(CentOS7)操作系统中安装Apache Tomcat并将其设置为开机启动是一项常见的任务,特别是在部署Java web应用时。本篇文章将详细讲解如何在CentOS7上安装Tomcat8并将其配置为自启动服务。 首先,我们来了解...

    监测tomcat应用down自动启动脚本

    sleep 10 # 等待Tomcat启动完成 ``` 为了确保脚本的持续运行,我们可以将其配置为系统服务,例如使用`systemd`(在RHEL 7及更高版本中)或者`chkconfig`(在RHEL 5/6中)。创建一个名为`tomcat-monitor.service`的...

    彻底找到 Tomcat 启动速度慢的元凶

    ### 彻底找到Tomcat启动速度慢的元凶 #### 问题现象与初步排查 文章描述了一位技术人员遇到的问题:Tomcat服务器启动异常缓慢。起初,这位技术人员猜测问题可能源于部署的应用程序,因此采取了极端措施,即清空了`...

    eclipse部署tomcat 报错

    在Eclipse中部署Tomcat服务器时,需要正确地配置Tomcat服务器,清除Tomcat服务器的缓存,添加项目路径到Tomcat服务器的配置文件中,并启动Tomcat服务器。按照这些步骤进行,可以确保在Eclipse中部署Tomcat服务器时...

Global site tag (gtag.js) - Google Analytics