tomcat8在linux下安装使用一段时间后启动非常慢,6分钟左右。

原因是一个随机数生成参数导致的。

处理如下:

修改catalina.sh .配置JRE使用非阻塞的Entropy Source

if [ -z "$JSSE_OPTS" ] ; then
  JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
fi
JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS -Djava.security.egd=file:/dev/./urandom"

红色部分是增加的.

Tomcat 8熵池阻塞变慢详解

作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs

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

tomcat8启动慢相关推荐

  1. tomcat8 启动项目pom.xml配置

    tomcat8 启动项目pom.xml配置 <build><finalName>WebTest</finalName><plugins><plug ...

  2. [tomcat]-tomcat8启动时SessionIdGeneratorBase.createSecureRandom耗时

    https://blog.csdn.net/xujiamin0022016/article/details/88142973 tomcat8启动时SessionIdGeneratorBase.crea ...

  3. Linux Tomcat8 启动堆内存溢出

    今天在部署一个开源项目的时候,Tomcat8启动异常,报错信息: Exception in thread "RMI TCP Connection(idle)" java.lang. ...

  4. Tomcat8启动不了的问题

    这是本人第一次写博客,完全是菜鸟一枚,如果有什么不对的地方,欢迎随时指正!! 解决问题主要参考大牛的文章:http://blog.csdn.net/machinecat0898/article/det ...

  5. windows下tomcat8启动脚本代码剖析--catalina.bat

    Windows下,Tomcat可以以服务形式启动.停止,也可以执行脚本启动(startup.bat).停止(shutdown.bat).执行startup.bat时会调用catalina.bat,ca ...

  6. tomcat8启动异常:APR/native library which is not available

    cetos7.0环境下启动tomcat8,报如下错误 Tomcat ans APR lib : requires the APR/native library which is not availab ...

  7. 解决Tomcat8启动时控制台中文乱码

      启动Tomcat8的时候,可能会出现控制台中文乱码   实际上此时Tomcat已经启动成功了!但是可以看到控制台出现了乱码(也可能不会),这让人非常不爽.   原因很简单,Tomcat8默认使用U ...

  8. linux tomcat8 启动慢,Linux系统下Tomcat8启动速度很慢的解决方法

    前言 最近在工作中遇到一个问题,在Linux下Tomcat 8启动很慢,且日志上无任何错误,在日志中查看到如下信息: Log4j:[2017-08-2715:47:11] INFO ReadPrope ...

  9. JSF中run项目时候Tomcat8启动不了的一种方法

    把另一个博客内容迁移到这 我的问题是Tomcat是可以启动的 但是run那个jsp的时候 七月 10, 2016 3:14:54 下午 org.apache.tomcat.util.digester. ...

最新文章

  1. 【Netty】ByteBuf--Netty的数据容器
  2. iOS 利用RunTime检测控制器是否销毁
  3. linux下好用的软件
  4. .net IL 指令速查
  5. python stringvar函数_Tkinter 求助,怎么获取StringVar() 的值
  6. J .U.C 中的原子操作类
  7. Nginx解决前端调用后端接口跨域问题
  8. 我们团队有个做风水项目的现在月收入也有几万了
  9. (转)C# Enum,Int,String的互相转换 枚举转换
  10. php 向文件夹中添加HTML文件,批量向html中插入内容
  11. Feign 简介与使用入门,请求、响应压缩,日志记录
  12. 理解和使用 JavaScript 中的回调函数
  13. 正龙广告借接入平台实现财务集中管理
  14. PCL RANSAC点云配准
  15. 数位笔与数位屏上的光标对不上的解决方法
  16. android手机usb设置在哪里,手机usb调试在哪,教您安卓手机怎么打开USB调试
  17. predict函数 R_第四十讲 R-线性回归:预测模型及可信区间
  18. java osm_OSM初识(三)OSM Data
  19. 【js学习笔记】去除省、市、区、特别行政区、自治区
  20. HDU - 1873 看病要排队(优先队列)

热门文章

  1. 2021-10-7 !二叉树的层序遍历
  2. 【版本工具】SVN-E155036 Working copy ... is too old Please see the ‘svn upgrade‘ command
  3. webstorm怎么跑项目_快讯!明年厦门中考体育项目定了!初三家长抽的!其他地市抽到啥?...
  4. ERROR 1366 (HY000): Incorrect string value......(Mysql报错解决)
  5. 天津大学计算机考研真题,天津大学计算机科学与技术考研真题
  6. 小学文凭有计算机知识,重大版小学信息技术毕业复习题
  7. python中的wheel有什么用_什么是Python Wheels?为什么要学Python Wheels
  8. 月薪5K的运维小白如何成为月薪5W的高级架构师?
  9. mysql查询 伪列_Mysql数据库查询到的数据设置伪列显示
  10. mysql 去重_mysql 去重留一