如何让tomcat启动更快(快速解决Tomcat启动慢的问题,超简单)
如何让tomcat启动更快
快速解决Tomcat启动慢的问题,超简单今天在帮一位同学解决了一个问题——Tomcat启动超级慢,大概五六分钟。解决之后,只需要3秒钟即可启动。
问题怎么解决呢?
在Tomcat的bin目录下找到catalina.sh,然后打开它,在以下位置添加一行代码:
-Djava.security.egd=file:/dev/urandom
2019年02月12日补充:很多朋友想知道原理,我就简单说明一下。
Tomcat 7和Tomcat 8在启动的时候会调用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom来产生一串安全随机数。
在Linux(CentOS)环境下,随机数可以从两个特殊的文件中产生,一个是/dev/urandom,另外一个是/dev/random。
它们产生随机数的原理是利用当前系统的熵池来计算出固定一定数量的随机比特,然后将这些比特作为字节流返回。熵池就是当前系统的环境噪音,熵指的是一个系统的混乱程度,系统噪音可以通过很多参数来评估,如内存的使用,文件的使用量,不同类型的进程数量等等。
/dev/random在不能产生新的随机数时会阻塞程序,直到根据熵池产生新的随机字节之后才返回;而/dev/urandom不会(ublock),当然,产生的随机数效果也不太好。
所以我们强制Tomcat使用/dev/urandom而不是/dev/random来产生随机数,速度就会大幅提升——由好几分钟到只有几秒钟。
补充知识:Tomcat 启动很慢,且日志上无任何错误的解决方案
1.问题
有一次把项目部署上去阿里云的时候,项目没有问题,但是启动tomcat的时候,启动到一半,半天才有反应,才执行完tomcat的启动进程。
Tomcat 启动很慢,且日志上无任何错误,在日志中查看到如下信息:
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 se
2.原因
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的读操作将被阻塞,直到熵池收集到足够的环境噪声数据。这么做的目的是成为一个密码安全的伪随机数发生器,熵池要有尽可能大的输出。对于生成高质量的加密密钥或者是需要长期保护的场景,一定要这么做。
3.解决方案
有两种解决办法:
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这个文件。
可以通过在vi命令进行查找:
?securerandom.source
找到下面的内容:
securerandom.source=file:/dev/random
然后替换成:
securerandom.source=file:/dev/./urandom
以上这篇快速解决Tomcat启动慢的问题,超简单就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持开心学习网。
- tomcat怎么知道访问servlet(详解从源码分析tomcat如何调用Servlet的初始化)
- centos怎样开启tomcat(Centos8.2云服务器环境安装Tomcat8.5的详细教程)
- tomcat是异步非阻塞吗(浅谈Tomcat如何打破双亲委托机制)
- nginx tomcat docker 负载均衡(Nginx+Tomcat实现负载均衡、动静分离的原理解析)
- tomcat服务出现乱码(解决Tomcat10 Catalina log乱码问题)
- tomcat不显示图片怎么办(解决Tomcat重新部署后图片等资源被自动删除的问题)
- 2022-01-26 01:41:54
- docker如何改tomcat(docker安装Tomcat 404问题的解决方案)
- tomcat作用及原理(详解Tomcat常用的过滤器)
- idea发布项目在tomcat哪个目录下(idea发布web项目后Tomcat服务器找不到该项目的问题及解决方法)
- docker部署tomcat(Docker安装Tomcat、MySQL和Redis的步骤详解)
- idea社区版使用tomcat部署项目(基于IDEA部署Tomcat服务器的步骤详解)
- spring-boot 内置tomcat启动(centos环境下使用tomcat 部署SpringBoot的war包)
- tomcat配置远程调试(一次tomcat源码启动控制台中文乱码的调试过程记录)
- tomcat部署web项目常见问题(关于tomcat部署应用无法访问前端页面的问题)
- tomcat优化jvm(Tomcat修正JDK原生线程池bug的实现原理)
- 中国留学生都是富二代吗()
- 我们现在吃的苹果是哪里来的 原来现代苹果引入中国仅有一百多年(我们现在吃的苹果是哪里来的)
- 买绿宝不能只挑黄绿色 菜农教你3招挑,个个皮薄肉脆,香甜爆汁(买绿宝不能只挑黄绿色)
- 大果肉搭配薄瓜皮, 绿宝 脆甜爽口,不愧是甜瓜中的 佼佼者(大果肉搭配薄瓜皮)
- 河南尉氏县因地制宜发展果蔬种植 水坡镇绿宝甜瓜变 金瓜(河南尉氏县因地制宜发展果蔬种植)
- 谢广坤,你这么欺负谢腾飞,良心不会痛吗(你这么欺负谢腾飞)
热门推荐
- selenium是否登录成功(使用selenium模拟登录解决滑块验证问题的实现)
- css3旋转动画教学(css3动画效果抖动解决方法)
- MVC中使用jQuery加载分部视图(PartialView)
- sqlserver表空间占用率(SQL Server获取磁盘空间使用情况)
- 淘宝算法推荐逻辑公式(详解淘宝H5 sign加密算法)
- pandas如何指定空数据类型(解决Pandas的DataFrame输出截断和省略的问题)
- html5app开发用什么平台(Html5与App的通讯方式详解)
- xshell服务器(如何使用Xshell连接云服务器)
- 如何用python爬取最新电影(详解Python爬取并下载《电影天堂》3千多部电影)
- react和antd项目教程(React引入antd-mobile+postcss搭建移动端)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9