Tomcat启动时SecureRandom超级慢的问题
来源:互联网 发布:关注淘宝店图片 编辑:程序博客网 时间:2024/05/16 17:30
Tomcat启动时SecureRandom超级慢的问题
前言:最近部署springboot项目的时候,正常情况下启动很快,但是当我在centos上启动的时候卡在一个地方3-5分钟。所以查看一下问题。
Creation of SecureRandom instance for session
Tomcat 7/8都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom类产生安全随机类SecureRandom的实例作为会话ID
SHA1PRNG算法是基于SHA-1算法实现且保密性较强的伪随机数生成器。
在SHA1PRNG中,有一个种子产生器,它根据配置执行各种操作。
Linux中的随机数可以从两个特殊的文件中产生,一个是/dev/urandom.另外一个是/dev/random。他们产生随机数的原理是利用当前系统的熵池来计算出固定一定数量的随机比特,然后将这些比特作为字节流返回。熵池就是当前系统的环境噪音,熵指的是一个系统的混乱程度,系统噪音可以通过很多参数来评估,如内存的使用,文件的使用量,不同类型的进程数量等等。如果当前环境噪音变化的不是很剧烈或者当前环境噪音很小,比如刚开机的时候,而当前需要大量的随机比特,这时产生的随机数的随机效果就不是很好了。
这就是为什么会有/dev/urandom和/dev/random这两种不同的文件,后者在不能产生新的随机数时会阻塞程序,而前者不会(ublock),当然产生的随机数效果就不太好了,这对加密解密这样的应用来说就不是一种很好的选择。/dev/random会阻塞当前的程序,直到根据熵池产生新的随机字节之后才返回,所以使用/dev/random比使用/dev/urandom产生大量随机数的速度要慢。
有两种解决办法:
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/random
替换成
securerandom.source=file:/dev/urandom
结语:
前一阵在部署项目时,单独启动tomcat很快就能启动,然后将项目部署到Tomcat中时,启动则需要很久,是卡在一个地方不动,也没有报错,刚开始认为是项目有问题,导致tomcat启动不开,后来经过多方排除,发现是上述问题导致的,修改过后,tomcat可以顺利启动。
- Tomcat启动时SecureRandom超级慢的问题
- Tomcat启动时SecureRandom超级慢的问题
- Tomcat启动时SecureRandom超级慢的问题
- Tomcat启动时SecureRandom超级慢的问题
- tomcat启动太慢,耗时很长的问题 Creation of SecureRandom instance for ...
- 关于SecureRandom导致tomcat启动慢
- SpringBoot启动慢--SecureRandom
- SecureRandom生成随机数超慢 导致tomcat启动时间过长的解决办法
- SecureRandom生成随机数超慢 导致tomcat启动时间过长的解决办法
- Tomcat启动时Creation of SecureRandom instance for session ID很慢
- tomcat启动慢的问题
- tomcat启动慢的问题
- CentOS环境下tomcat启动超级慢的解决方案
- Tomcat启动慢问题
- 腾讯云 启动tomcat超级慢 解决
- tomcat 启动慢 Creation of SecureRandom instance for session ID generation using [SHA1PRNG]
- tomcat启动慢, Creation of SecureRandom instance for session ID generation using [SHA1PRNG]took [xx] mil
- tomcat 启动慢 Creation of SecureRandom instance for session ID generation using [SHA1PRNG]took [xx] mil
- Android电话拨号器案例
- Centos 7 service 命令的更改,systemctl命令简单实用实例
- C#取色器
- ORACLE给不同表空间中的表授权及取消授权
- 使用Android Studio发布开源库到Bintray/Jcenter(新)
- Tomcat启动时SecureRandom超级慢的问题
- HDU 1003 Max Sum
- 8. String to Integer (atoi)
- mysql基本操作
- Guava Cache的Ticker
- java 随机字母数字生成算法
- 14.6.7 Configuring the Number of Background InnoDB IO Threads 配置InnoDB IO Threads的数量
- CSDN停止更新啦,欢迎大家关注我的Github https://github.com/chenguolin
- PCBA电路板组装焊接的一般原则