本章只是回顾一次eureka版本升级后tomcat资源占用过高的问题,临时解决。
升级springBoot、SpringCloud版本
- 升级完成后直接在测试环境测试部署,结果发现eureka的cpu资源占用过高,导致假死。通过arthas发现是tomcat线程阻塞。通过dependepency看了下springboot中内嵌tomcat的版本是9了。之前是8,测试环境一大堆人等着测试接口。首先想着降低tomcat版本。
查看依赖
gradle dependencies
mvn dependency:tree > output.txt # 输出到文件里
排除SpringBoot的Tomcat,指定Tomcat版本
有时候我们需要在特定情况下使用特定的Tomcat版本,这时候总不能因为Tomcat就改变SpringBoot的版本,所以可以采用排除SpringBoot中的Tomcat包,然后手动指定Tomcat的版本,当然还要引入Tomcat相关的包。
Gradle的配置
compile('org.springframework.boot:spring-boot-starter-web') {
exclude module: "spring-boot-starter-tomcat"
}
compile 'org.apache.tomcat.embed:tomcat-embed-core:8.5.37'
compile 'org.apache.tomcat.embed:tomcat-embed-el:8.5.37'
compile 'org.apache.tomcat.embed:tomcat-embed-logging-juli:8.5.2'
compile 'org.apache.tomcat.embed:tomcat-embed-websocket:8.5.37'
如果不指定版本,则会使用最新的Tomcat版本, 否则直接指定对应的版本号。
Maven的配置
- 在 pom.xml文件里面添加一个标签
<properties>,添加期望的版本。
<tomcat.version>8.5.37</tomcat.version>
- 添加必要的Jar包:
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-logging-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
重新部署eureka后一切正常。处理时间短暂,没有影响大家工作。时间过了大半年了,也忘记具体是啥原因了。有机会本地复现试试。