Description
Describe the bug
场景:
spring应用引用了sofa tracer的springmvn+zipkin两个依赖,进行链路监控
操作:
当spring应用运行在tomcat容器中时,直接对应用redeploy
结果:
tomcat的线程清理(WebappClassLoaderBase.clearReferencesThreads)发现相关线程无法被收回
发现日志后,通过对jvm线程监控,tomcat容器不动,应用多次redeploy,相关线程的确会重复创建,且无法gc回收
···
相关日志
03-Dec-2020 09:55:37.776 警告 [RMI TCP Connection(13)-127.0.0.1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[brave-webmvc-example]似乎启动了一个名为[Tracer-AsyncConsumer-Thread-SelfLogAppender]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
com.alipay.disruptor.BlockingWaitStrategy.waitFor(BlockingWaitStrategy.java:40)
com.alipay.disruptor.ProcessingSequenceBarrier.waitFor(ProcessingSequenceBarrier.java:47)
com.alipay.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:110)
java.lang.Thread.run(Thread.java:748)]
03-Dec-2020 09:55:37.776 警告 [RMI TCP Connection(13)-127.0.0.1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[brave-webmvc-example]似乎启动了一个名为[Tracer-TimedAppender-1-60]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)]
03-Dec-2020 09:55:37.777 警告 [RMI TCP Connection(13)-127.0.0.1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads Web应用程序[brave-webmvc-example]似乎启动了一个名为[Tracer-AsyncConsumer-Thread-NetworkAppender]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
com.alipay.disruptor.BlockingWaitStrategy.waitFor(BlockingWaitStrategy.java:40)
com.alipay.disruptor.ProcessingSequenceBarrier.waitFor(ProcessingSequenceBarrier.java:47)
com.alipay.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:110)
java.lang.Thread.run(Thread.java:748)]
···
Expected behavior
不存在内存泄漏,线程正常结束
Actual behavior
存在内存泄漏,线程重复创建且无法回收
Steps to reproduce
tomcat启动web应用,且应用引用了springmvc tracer
tomcat容器不动,重复对应用redeploy
Environment
- SOFATracer version:
- JVM version 8
- Tomcat version 8.5.6
- sofa-tracer version: 2.3.0