Tomcat8部署War启动时间非常长。 场景1:所有war包启动都慢 场景2:第一次启动以外都很慢
总结目前解决多种方法
1、随机数获取问题(本人试过无效)
catalina.sh 中加入
-Djava.security.egd=file:/dev/./urandom
如下
JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS -Djava.security.egd=file:/dev/./urandom"
具体原因(转载): Tomcat的启动需要产生session id,这个产生需要通过java.security.SecureRandom生成随机数来实现,随机数算法使用的是”SHA1PRNG”,但这个算法依赖于操作系统的提供的随机数据,在linux系统中,这个值又依赖于/dev/random 和/dev/urandom
/dev/random :阻塞型,读取它就会产生随机数据,但该数据取决于熵池噪声,当熵池空了,对/dev/random 的读操作也将会被阻塞。
/dev/urandom :非阻塞的随机数产生器,它会重复使用熵池中的数据以产生伪随机数据。
这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。
它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。
通过查看java.security文件可以了解具体采用哪种方式,java.security文件调整urandom也行
securerandom.source=file:/dev/./urandom
2、调整为NIO模式(TOMCAT8默认为NIO模式)(转载)
TOMCAT启动分为bio、nio、apr
bio(blockingIO) 阻塞式IO,Tomcat6及以前版本默认运行模式,性能非常低下,没有经过任何优化处理。
nio(noblocking IO) 非阻塞式IO,Tomcat7以后的版本默认运行模式,利用java异步IO技术使Tomcat运行性能有所提升。
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8543" />
如果要在Tomcat6开启NIO模式,直接修改server.xml里的Connector节点,修改protocol为
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8543" />
org.apache.coyote.http11.Http11NioProtocol,启动生效。
Tomcat8默认配置启动完后最后三行日志如下:

3、JarScanFilter Jar包扫描配置
conf/context.xml加入一下配置 该配置主要用常用于跳过一些已知无相关jar包的扫描
<Context>
<JarScanner>
<JarScanFilter defaultPluggabilityScan="false" />
</JarScanner>
</Context>
启动时间减少一半左右 以上配置理由目前还不太理解。参考官方文档
注意: 目前还是不知道具体问题。公司一共有好几个docker环境,都是相同镜像拷贝。但是其中一个环境什么都没有改,启动就非常快,其他环境就很慢。所以继续研究