我收到此错误:
SEVERE: The web application [/app] appears to have started a thread named [ImmediateThread-1469817702874] but has failed to stop it. This is very likely to create a memory leak.
我正在使用Jersey,我认为它会创建ImmediateThread
,基本上,我无法控制它。有什么方法可以访问所有ThreadLocal
个对象并在contextDestroyed()
上删除它们吗?
我知道如果我们基本上重新启动Tomcat服务器就可以忽略这一点,但我很乐意有权取消部署和部署应用程序,而不必担心可能的内存泄漏。
我使用的是Java 7,Tomcat 7,Jersey,Hibernate。
答案 0 :(得分:0)
如果您使用足够新的HK2,您应该能够使用工具来控制John Wells建议的即时线程(请参阅https://java.net/jira/browse/HK2-280?focusedCommentId=390557&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-390557)。
实际上,如果这些工具足够好,如果我们默认在泽西岛启用了立即范围(见https://java.net/jira/browse/JERSEY-2979),那将会很酷。(见https://jersey.java.net/apidocs/latest/jersey/org/glassfish/jersey/server/spi/ContainerLifecycleListener.html)。 我想,我的想法是使用Jersey控制的执行程序服务来处理即时线程,这些线程会在Jersey应用程序生命周期的正确时刻关闭(例如,使用https://java.net/jira/browse/JERSEY-2979)。
如果您能够为此票证{{3}}做出贡献(至少通过添加示例),那将会很酷。