(转载)解决tomcat启动项目很慢的问题 Skipping unneeded JARs during scanning can improve startup time and JSP com...

引言:
今天在linux使用tomcat+war包方式部署项目的时候,发现tomcat启动时,会卡住一段时间,接近4分钟左右。这对拥有小暴脾气的我肯定没法接受,网上也有很多的解决方案,一一尝试没一个有用,经过各种翻墙查阅资料,终于找到解决方案,特此记录下

现象:
观察启动日志可看到如下警告日志:
TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time
这段日志的原因是:
1:Tomcat启动时会扫描大量jar包,如果含有不符合TLD规范的就会出现这个问题
2:以后基本上不会使用JSP作为视图层,所以我们可能根本不需要TLD这个东西,就算不要TLD也没有什么关系
解决办法:
1:查找tomcat/conf/catalina.properties 修改tomcat.util.scan.StandardJarScanFilter.jarsToSkip=的值为*.jar
这段配置代表tomcat在启动时,跳过所有的jar扫描。但是本人亲测并没有作用
2:修改jre随机种子的生成规则。

原因:Tomcat 7/8都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom类产生安全随机类SecureRandom的实例作为会话ID,我这儿花了300多S
产生器会评估熵池(entropy pool)中的噪声数量。随机数是从熵池中进行创建的。当读操作时,/dev/random设备会只返回熵池中噪声的随机字节。/dev/random非常适合那些需要非常高质量随机性的场景,比如一次性的支付或生成密钥的场景。
当熵池为空时,来自/dev/random的读操作将被阻塞,直到熵池收集到足够的环境噪声数据。这么做的目的是成为一个密码安全的伪随机数发生器,熵池要有尽可能大的输出。对于生成高质量的加密密钥或者是需要长期保护的场景,一定要这么做。
最终解决办法
在Tomcat环境中解决 可以通过配置JRE使用非阻塞的Entropy Source。

在$TOMCAT_HOME/conf/catalina.sh中加入:-Djava.security.egd=file:/dev/./urandom 即可。
在JVM环境中解决
打开$JAVA_HOME/jre/lib/security/java.security这个文件,将securerandom.source的值修改为file:/dev/./urandom

使用这种方案后,启动速度从300多S下降至10S

作者:一个傻乎乎的少年
链接:https://www.jianshu.com/p/990bce33427d
来源:
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:((转载)解决tomcat启动项目很慢的问题 Skipping unneeded JARs during scanning can improve startup time and JSP com...)