在 JVM 停止期间关闭由第 3 方 JAR 打开的 ScheduledThreadPoolExecutor

Shutdown ScheduledThreadPoolExecutor opened by 3rd party JAR during JVM stop

在 JVM 停止期间,很少 thread pool 没有正确关闭。由于这个 Perm Gen leak 发生,因为 class 加载器被限制被垃圾收集。

这些线程池由第 3 方应用程序 (Elasticsearch) 打开,除了 client 实例之外,我无法直接控制它。

client 实例确实为 shutting downschedulerthread pool 提供了方法,但是这个错误没有得到纠正。 '

请帮忙。有什么方法可以获取 3rd Parties ScheduledThreadPoolExecutor 的实例并通过 Java 应用程序关闭它?

参考这两篇文章解决的答案:

Plumbr 工具帮助提供了 class 加载程序泄漏参考和导致内存泄漏的线程的详细信息。

第 1 条: 这篇文章建议如何找出谁创建了导致内存泄漏的线程。

how to find out who create a thread in java?

@Aaron Digulla 的回答救了我。尤其是第4点和第5点。

第 2 条: 本文建议如何关闭客户端。

http://forum.spring.io/forum/spring-projects/data/nosql/118557-mongo-application-fails-to-stop-thread-mongocleaner-with-redeploy-or-restart-tomcat