-
Notifications
You must be signed in to change notification settings - Fork 377
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
tomcat容器运行,存在内存泄漏风险 #398
Comments
这个线程是单例,应该没有问题的。 你 jstack 确认下 redeploy 之后 Tracer-AsyncConsumer-Thread-SelfLogAppender 线程有多个吗?如果只有一个的话,那就没问题。 |
好的,那就说明有问题。 你的 redeploy 是怎么操作的,复现方法有不? |
@yuhao0926 场景收到,这种直接部署war,不同 classloader的 case 我们看一下。 |
好的谢谢,这种情况在我理解,可能类似log4j,mysql-conn这种情况,它们是提供了一个手动clear的shutdown方法,这样在类似不同classloader的情况下,可以进行线程安全控制,例如tomcat可以通过注册ServletContextListener的contextDestroyed方法进行一些销毁操作。。不知道sofa-tracer是否原理相同 |
Describe the bug
场景:
spring应用引用了sofa tracer的springmvn+zipkin两个依赖,进行链路监控
操作:
当spring应用运行在tomcat容器中时,直接对应用redeploy
结果:
tomcat的线程清理(WebappClassLoaderBase.clearReferencesThreads)发现相关线程无法被收回
发现日志后,通过对jvm线程监控,tomcat容器不动,应用多次redeploy,相关线程的确会重复创建,且无法gc回收
···
Expected behavior
不存在内存泄漏,线程正常结束
Actual behavior
存在内存泄漏,线程重复创建且无法回收
Steps to reproduce
tomcat启动web应用,且应用引用了springmvc tracer
tomcat容器不动,重复对应用redeploy
Environment
The text was updated successfully, but these errors were encountered: