Tomcat9.0启动变慢解决

问题过程

在linux centos7上部署测试web项目时,通过nginx配置的tomcat集群,在启动tomcat9.0的过程中,无报错信息,但tomcat一直卡在Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.无法继续执行,约5.6分钟后,tomcat才启动成功。

tomcat启动日志

通过查看tomcat根目录下的日志(logs/catalina.xxxx-xx-xx.log):
08-Aug-2020 09:30:43.870 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/root/tomcat/tomcat9.0.37-1/webapps/wnshop.war] has finished in [748] ms
08-Aug-2020 09:30:43.870 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/root/tomcat/tomcat9.0.37-1/webapps/wnshop1.war]
08-Aug-2020 09:30:44.156 INFO [main] org.apache.jasper.servlet.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.

分析

查阅资料发现由于tomcat启动时产生随机数导致jvm阻塞,可能是我多次重启tomcat导致熵池被用空造成阻塞,在apache-tomcat官方文档:如何让tomcat启动更快里面提到了一些启动时的优化项,其中一项是关于随机数生成时,采用的“熵源”(entropy source)的策略。它提到tomcat的session id的生成主要通过java.security.SecureRandom生成随机数来实现。

随机数算法使用的是”SHA1PRNG”,在sun/oracle的jdk里,这个算法的提供者在底层依赖到操作系统提供的随机数据,在linux系统的jdk中与之相关的是/dev/random和/dev/urandom,当熵池为空时
自/dev/random的读操作将被阻塞,直到熵池收集到足够的环境噪声数据。这么做的目的是成为一个密码安全的伪随机数发生器,熵池要有尽可能大的输出。对于生成高质量的加密密钥或者是需要长期保护的场景,一定要这么做。

而在环境噪声中,随机数产生器会手机来自设备驱动器和其它源的环境噪声数据,并放入熵池中,产生器会评估熵池中的噪声数据的数量,当熵池为空时,这个噪声数据的收集是比较花时间的,这就意味着,Tomcat在生产环境中使用熵池时,会被阻塞较长的时间。

解决方法

1)配置tomcat参数

可以通过配置JRE使用非阻塞的Entropy Source:

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

建议

1.上述解决方式也是通过查阅资料得到的,具体的原理笔者也正在了解中;

2.概括下大概可以从 “熵源”(entropy source)的策略 随机数算法”SHA1PRNG” /dev/random的读操作 环境噪声这几个方面来深入了解这个问题。

解决tomcat启动-Skipping unneeded JARs during scanning can improve startup time and JSP compilation time相关推荐

  1. 如何解决tomcat启动时出现 Server Tomcat v9.0 Server at localhost failed to start.

    如何解决tomcat启动时出现 Server Tomcat v9.0 Server at localhost failed to start. **方法一:**点击控制台下的server,右击一下,点 ...

  2. 解决 Tomcat 启动报does not exist or is not a readable directory错误

    2017-02-22 已解决,恩-.这次是真的解决完成才写的 在运行tomcat的时候,感觉部署的项目有点多,则删除了几个项目,再次启动Tomcat的时候突然报错了,如下图: 于是各种百度,找到了一篇 ...

  3. 解决Tomcat启动失败:严重 [main] org.apache.catalina.util.LifecycleBase.handleSubClassException 初始化组件失败

    在安装和配置Tomcat的过程中,出现了Tomcat启动失败的问题. 21-Oct-2022 13:41:57.148 严重 [main] org.apache.catalina.util.Lifec ...

  4. 如何解决tomcat启动闪退问题

    在这几天,遇到一个Tomcat启动闪退的问题,通过查阅各种资料,算是完美解决.在此分享给朋友们. 首先,确定你的问题在哪里 1.查询错误:win+R 输入cmd,进入一般处理程序.通过cd 找到你To ...

  5. 解决tomcat启动闪退问题

    通过自己的实践和查阅资料,完美解决一下问题.分享给需要的朋友. 遇到问题所在 tomcat启动后,黑窗口一闪而过. 原因分析 缺少JAVA_HOME 或者缺少JRE_HOME,说明你的环境变量不对,或 ...

  6. tomcat8打开闪退_如何解决tomcat启动闪退的問題

    tomcat的运行需要JRE,一般启动闪退都是因为找不到JRE,也就是说环境安装JDK时环境变量没有配置好. 我们首先打开"命令提示符"窗口,输入java命令,城市jDK是否安装, ...

  7. 解决Tomcat启动时出现的The APR based Apache Tomcat Native library异常

    现在用的tomcat6.0,不知道大家注意没有,在启动的时候,那个启动窗口最上面出现这样一条信息: 信息: The APR based Apache Tomcat Native library whi ...

  8. 终极方法--解决Tomcat启动闪退

    首先找到tomcat下的bin目录包的startup.bat文件 右击点击编辑,在其最后一行加上pause 一.环境配置问题 双击start.up,如果出现下图的情况就证明jdk环境没有配置好 接着回 ...

  9. 完美解决Tomcat启动一闪而过

    目录 前言 一.解决方案 1.Java环境变量没配置. 2.端口被占用 3.黑窗口报错,百度一下你就知道 4.JDK问题 4.1 两种解决方案 前言 作为一个多年(>1)经验的开发,帮朋友部署项 ...

最新文章

  1. 转帖:硬盘生产全过程(图)
  2. 使用浏览器wpf应用程序时访问数据库需要报权限错误的解决方法
  3. 解密京东618大促数据库运维的攻守之道
  4. 车载DMI linux系统,基于嵌入式的CTCS3级车载DMI系统的设计与实现
  5. android studio gradle 配置copy,Mac系统配置Android Studio的gradle命令
  6. 推荐 12 个好用的 React 的开源项目,开发效率又能提升了!
  7. 【视频】vue指令之@click及其stop修饰符
  8. ASP.NET_读写Cookie
  9. 读古诗系列--(两首)题都城南庄/江楼感旧
  10. 【转】软件工程能力漫谈:比质量更重要的,是项目管理能力
  11. 【2017年第1期】大数据能力开放平台创新和发展
  12. STM32CubeIDE教程-现场表达式切换数字进制表示
  13. 【es】ClassNotFoundException: org.elasticsearch.plugins.ExtendedPluginsClassLoader
  14. 联想拯救者Legion Y7000P 2020款(10代INTEL+GTX1650)安装ubuntu16.04(双系统)
  15. C#分布式缓存二:Asp.Net中使用Couchbase
  16. ALV 行、列、单元格颜色设置
  17. 软件设计师历年c语言算法,2021年历年软考软件设计师真题押题分析.doc
  18. 无线通信设备安装工程概预算编制_安装造价工程 电气安装预算编制
  19. 机器学习面试150题:不只是考SVM xgboost 特征工程
  20. 排坑·IPhoneIOS中不兼容正则中的断言匹配

热门文章

  1. 基金指数温度怎么算_10分钟学会计算指数温度,挑选指数基金
  2. 计算机专业跨考为什么考不了,浙江大学计算机专业考研,为什么这么多跨考计算机...
  3. 2022考研数学 张宇 基础班【配套张宇30讲】【免费分享】
  4. linux iio 设备驱动,FS4412开发板使用Linux IIO驱动框架实现ADC驱动
  5. 服务器inetpub是什么文件夹,inetpub是什么文件夹?Win10怎么删除c盘下的inetpub文件夹?...
  6. CoAP协议学习——CoAP基础
  7. Android在xml文件中设置颜色透明度
  8. java maven导入_Eclipse导入Maven项目详解(新手初学)
  9. Redis学习笔记(五)——持久化及redis.conf配置文件叙述
  10. 发票信息批量提取到 excel 软件 4.0