zoukankan      html  css  js  c++  java
  • Tomcat启动时SecureRandom非常慢

    今天重置服务器并重新安装 tomcat 的时候,原来的项目突然需要很长时间才可以启动,于是进行了一番排查...

    21-Feb-2019 17:56:58.631 WARNING [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [425,505] milliseconds.
    

    查看 Tomcat 日志发现上面的问题。

    网上说是 SecureRandom generateSeed 的原因,当会使用 /dev/random 生成种子。但是 /dev/random 是一个阻塞数字生成器,如果它没有足够的随机数据提供,它就一直等,这迫使 JVM 等待。

    解决方案大致为两种:

    1.在Tomcat环境中解决:
    在 catalina.sh 中加入这么一行:-Djava.security.egd=file:/dev/./urandom 即可。

    2.在 JVM 环境中解决:
    打开 $JAVA_PATH/jre/lib/security/java.security 这个文件,找到下面的内容:
    securerandom.source=file:/dev/random
    替换成:
    securerandom.source=file:/dev/./urandom

    那么是什么原因导致 Tomcat 突然就慢了呢?

    原因出在这是一台新的 Linux 服务器。

    Tomcat 的 session id 的生成主要通过 java.security.SecureRandom 生成随机数来实现,随机数算法使用的是”SHA1PRNG”。

    在linux上,与之相关的是 /dev/random 和 /dev/urandom。这两个设备会返回小于熵池噪声总数的随机字节。若熵池空了,对/dev/random 的读操作将会被阻塞,直到收集到了足够的环境噪声(鼠标、键盘、输入等)为止。

    而我今天启动的是一台新的刚刚装好的 Linux 系统,并且 Tomcat 在启动的时候在使用 /dev/random 这个阻塞随机数获取,从而出现上面的长时间的耗时。

  • 相关阅读:
    给xml某个节点赋值
    把datatable的某些数据提取出来放在另一个表中
    投资技巧:抛股票有技巧 常用方法介绍
    jquery的实用技巧,非常实用
    我觉得需要关注和跟进的一些.net技术
    公司网站的架构
    uboot移植经历
    ARM处理器中CP15协处理器的寄存器
    uboot 学习 Makefile分析
    uboot移植
  • 原文地址:https://www.cnblogs.com/manastudent/p/12264307.html
Copyright © 2011-2022 走看看