如何解决@Schedule Spring 和 HttpClientImpl$SelectorManager 创建类加载器泄漏
如果我正在创建一个具有 HTTPClient
的 bean 并使用 @Schedule
注释该 bean 中的一个方法 -> 战后取消部署应用程序(例如 tomcat 或 jboss)我正在创建类加载器内存泄漏.
如果我只是删除 @Schedule
注释,在取消部署后需要一些时间,但是 HttpClientImpl$SelectorManager
会被 GC。
我假设 @Schedule
机制保持到类的软链接,因此 HTTPClient
(通常允许它被 GC),但是 HttpClientImpl$SelectorManager
不理解这一点并保持开放?!
有人遇到类似问题或对此有想法吗?
MAT:(我有 3 个 @Schedule
带注释的类/方法)
(openjdk build 11.0.9+11-LTS,spring boot 2.4.4)
解决方法
HttpClientImpl$SelectorManager
将在检测到所有操作都已终止并且对 HttpClient
的所有引用都已释放时终止。但是,在释放所有引用的时间与 SelectorManager
线程注意到它的时间之间可能存在一小段延迟。默认情况下,此时间最长可达 3 秒。
如果您观察到 SelectorManager
线程仍在运行 - 那么可能是因为:
- 仍有一些对
HttpClient
的强烈引用, - 某些请求仍在进行中
-
SelectorManager
还没有注意到它可以终止
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。