[转] tomcat 7/8 启动非常慢的解决方法

在日志中发现启动慢的地方:

2016-11-14 09:31:30.522 [localhost-startStop-1] INFO  o.s.c.s.DefaultLifecycleProcessor - Starting beans in phase 2147483647
2016-11-14 09:31:30.556 [localhost-startStop-1] INFO  o.s.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 12902 ms
2016-11-14 09:32:33.146 [localhost-startStop-1] INFO  o.a.c.util.SessionIdGeneratorBase - Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [62,587] milliseconds.
2016-11-14 09:32:33.214 [localhost-startStop-1] INFO  o.s.web.servlet.DispatcherServlet - FrameworkServlet ‘DispatcherServlet‘: initialization started

原因:

Tomcat 7/8都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom类产生安全随机类SecureRandom的实例作为会话ID,这里花去了62秒,也即接近1分钟,当然有时花费时间更长,达到5-10分钟。

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中加入这么一行:

JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"

即可。

加入后再启动Tomcat,整个启动耗时迅速下降。

2)在JVM环境中解决

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

securerandom.source=file:/dev/urandom

替换成

securerandom.source=file:/dev/./urandom
时间: 2024-09-29 16:06:31

[转] tomcat 7/8 启动非常慢的解决方法的相关文章

Tomcat 7/8 启动非常慢的解决方法

在日志中发现启动慢的地方: 2016-11-14 09:31:30.522 [localhost-startStop-1] INFO o.s.c.s.DefaultLifecycleProcessor - Starting beans in phase 2147483647 2016-11-14 09:31:30.556 [localhost-startStop-1] INFO o.s.web.context.ContextLoader - Root WebApplicationContext:

【CentOS】fstab挂载项错误,无法正常启动系统的解决方法

因/etc/fstab的配置错误,导致重启系统时,无法正常进入系统,会卡在以下的页面. 提示的错误信息类似: An   error   occurred  during   the  file   system   check. 解决方法: 1.在错误的启动界面处输入root的密码(不会有显示的,只管输入正确的密码即可) 2.然后会出现(Repair  filesystem)1#的提示符,在其后面输入运行:mount  -no  remount,rw   / 3.编辑/etc/fstab的文件,

touch: cannot touch '/usr/local/tomcat/logs/catalina.out': Permission denied解决方法

logs目录没有创建修改权限 ./startup.sh Using CATALINA_BASE:   /usr/local/tomcat702 Using CATALINA_HOME:   /usr/local/tomcat702 Using CATALINA_TMPDIR: /usr/local/tomcat702/temp Using JRE_HOME:        /usr/java/jdk1.6.0_24 Using CLASSPATH:       /usr/local/tomcat

maven的jetty插件提示No Transaction manager found导致启动慢的解决方法

本文出处:http://blog.csdn.net/chaijunkun/article/details/37923905,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在原始出处查看此文.在使用maven开发web项目极大地方便了jar包的依赖,在测试时也可以集成Servlet容器,从启动速度和量级上看,Jetty无疑是不二选择,然而从8.x开始,如果你的web项目中不包含数据库访问(或者说没有事务管理器)的话,在其启动时会提示找不到事务管理器,输出信息如下: o

eclipse无法启动的各种解决方法

eclipse无法启动的各种解决方法 Posted on 2012-10-17 12:06 周柯文 阅读(26816) 评论(0) 编辑 收藏 当选择完workspace之后,eclipse开始加载启动,在这个阶段经常出现闪退出的情况,这主要有两个原因: 原因一.eclipse.ini的配置问题: 可能配置的内存太小,或者系统本身内存不够了,比如我的就配置成这样: -Xms128m -Xmx512m -XX:PermSize=256m -XX:MaxPermSize=512m -Dorg.ecl

windows ubuntu Android studio安装好启动没反应解决方法

 参考:http://blog.csdn.net/qq305013720/article/details/8934152 目前有三种解决方案,都是针对执行studio.bat出现错误导致android studio运行不起来,最后都是异工同曲:我用的第一种方法 1.改虚拟机配置文件studio.exe.vmoptions 有人说是java环境变量,如果不会照着设置 http://blog.csdn.net/huanghm88/article/details/3965218 因为Eclipse

tomcat绿色版——运行一闪而过的解决方法

首先配置好jdk的环境变量 %JAVA_HOME%\bin;注意:一定是英文状态下的分号结尾 %TOMCAT%\bin;注意:一定是英文状态下的分号结尾 service.bat install service.bat uninstall tomcat绿色版--运行一闪而过的解决方法 原文地址:https://www.cnblogs.com/xiaostudy/p/9376970.html

Tomcat启动失败的解决方法

在使用Tomcat的时候,经常会遇到启动失败的问题:解决方法:1.检查环境变量的配置,jdk的配置2.检查端口是否被占用. 关于环境变量的配置很容易搜到,如果按照网上的教程配置好了,但是还是启动失败的话,这时就需要检查端口是否被占用了,实际上十有八九是端口被占用了.下面介绍第二种方法:打开dos窗口,输入以下命令: netstat -abn || findstr "8080" 或者 netstat -aon || findstr "8080"a:显示所有的连接和侦听

Springmvc+Hibernate在Eclipse启动Tomcat需要很长时间的解决方法

最近在学习SpringMvc开发,有一个提问困扰了很久,就是在Eclipse启动Tomcat需要很长时间,大概要1分多钟. 启动日志: 九月 08, 2016 8:59:01 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Server version: Apache Tomcat/8.0.36 九月 08, 2016 8:59:01 下午 org.apache.catalina.startup.VersionLogger