apolloconfig / apolloconfig/apollo

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

Aperta
#4,614 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub
need investigation
Lingua principale
Java
Stelle
29.8k
Fork
10.2k
Merge medio
4g 7h
PR unite (30g)
4

Descrizione

- [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

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.