Skip to content

tomcat容器运行,存在内存泄漏风险 #398

Open
@yuhao0926

Description

@yuhao0926

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

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions