Tomcat启动Creation of SecureRandom instance 卡住解决办法

本文描述Tomcat启动因为 Creation of SecureRandom instance for session ID generation using [SHA1PRNG] 卡住的问题,以及At least one JAR was scanned for TLDs yet contained no TLDs 解决办法

最初是升级dubbo项目开始,项目启动变慢一两分钟,后边突然就很过分十分钟,甚至还要多。

导致发版的时候要等很久,很有压力。

找到奇怪的日志

Creation of SecureRandom instance for session ID generation using [SHA1PRNG] 

通过这个日志,顺便科普到好些知识。简单讲是Tomcat启动需要通过 /dev/random 这个文件获取系统生成的安全随机数。随机数通过熵池获取(熵指当前系统的环境噪音,即一个系统的混乱程度,)。

通过random获取的是高安全性的随机数,因受系统环境影响其产生随机数的速度,所以产生速度慢。

通过/dev/urandom,产生的相对random低安全性的随机数,不受系统环境影响,产生速度非常快。

可以用命令 cat /dev/urandom | od -x ,(od -x是二进制转成十进制),一下就看到好几页随机数,在测试环境看random会慢一些,有时就几个字节卡死不动了。

解决办法:

方式一,在JVM中解决

修改 jre/lib/security 下的文件,java.security,找到

securerandom.source=file:/dev/random

           将其替换为:

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

为什么是 ./urandom,这是java的一个bug,简单说是不加点会使程序继续读random文件。

官方的bug记录地址

4705093
6202721

因为没有权限更改所以有第二种解决方式。

方式二,在tomcat中解决

tomcat/bin,找到文件 catalina.sh,添加内容

if [[ "$JAVA_OPTS" != *-Djava.security.egd=* ]]; then
    JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom"
fi

我加在了这个位置:

解决。

之前

现在

丝滑~

但是在windows环境这两种方式都没能解决我的问题,不过只有5004ms,还能接受。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值