apolloconfig / apolloconfig/apollo

使用tomcat热部署后,Apollo线程组不会销毁疑似造成内存泄漏

Abierto
#4,614 3 comentarios 0 reacciones 0 asignados Ver en GitHub
need investigation
Lenguaje dominante
Java
Estrellas
29.8k
Forks
10.2k
Merge medio
4 d 7 h
PR fusionados (30 d)
4

Descripción

- [x] 我已经检查过[discussions](https://github.com/ctripcorp/apollo/discussions)
- [x] 我已经搜索过[issues](https://github.com/ctripcorp/apollo/issues)
- [x] 我已经仔细检查过[FAQ](https://www.apolloconfig.com/#/zh/faq/common-issues-in-deployment-and-development-phase)

**描述bug**

目前有7项目部署在tomcat中,全部接入了Apollo,tomcat完全启动后,使用Java VisualVM能看到Apollo-开头的线程,一组4个,一共7*4=28个。
使用tomcat manager的重新部署功能,部署某一个项目后,每个Apollo-开头的线程会增加一个,而且之前的线程并不会销毁,造成的问题就是重启次数越来越多,导致线程数也越来越多。而且这个问题似乎导致了项目的内存泄漏,因为之前的线程无法销毁,导致tomcat的class loader也无法回收。

**复现**

通过如下步骤可以复现:

1. 使用tomcat部署war包项目,并且项目接入Apollo。
2. 使用Java VisualVM查看当前tomcat线程情况
3. 使用tomcat manager重新部署项目,Apollo-开头的线程会增加等同于项目数量的个数,并且之前的并不会销毁

**期望**

tomcat热部署后,对应的线程池不应该关闭吗,这里是没对tomcat情况做处理吗,请问是否有手动调用销毁这四类线程的方法?

**截图**

![启动后无reload操作线程情况](https://user-images.githubusercontent.com/42907460/197675099-bb800a5b-9b14-4ed2-851e-241c187dd967.png)
![启动后reload一个项目后线程情况](https://user-images.githubusercontent.com/42907460/197675117-f33aa3ef-f38f-4e4b-b942-065821d19634.png)

![3](https://user-images.githubusercontent.com/42907460/197675777-cf44c4e4-b758-4b61-be24-b1c3466d9d06.png)

![2](https://user-images.githubusercontent.com/42907460/197675776-f2e39bfb-4a57-40ab-a5d0-7711f253dd4e.png)

![1](https://user-images.githubusercontent.com/42907460/197675783-f09f6058-fe5f-470c-82ad-97fa61f0e47e.png)

### 额外的细节和日志

- 版本:tomcat版本 9.0.54,Apollo版本1.6.0
- 错误日志
- 配置:四核 64G内存
- 平台和操作系统:CentOS Linux release.7.5.1804,内核版本3.10.0-862.el7.x86_64

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.