gpt4 book ai didi

java - Tomcat 和 JAXB 内存泄漏

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:07:18 25 4
gpt4 key购买 nike

我已经追了好几天了。我们在我们的应用程序中使用 JAXB,sun 实现。当停止 Tomcat(6 或 7)时,在 catalina 日志文件中记录了严重的内存泄漏,列出了我们应用程序中的所有 JAXB 类,两个不同包中的两组。

我浏览了很多 google 和 Stack overflow 链接。我使用了 JProfiler,它告诉我 Tomcat 在不使用枚举时会保留枚举,但这不应该是问题所在。 marshaller 或 unmarshaller 的所有实例都在本地创建并设置为 null 以进行积极的 GC。我确保在销毁 servlet 时 JAXBcontext 为空,并且在我的 contextDestroyed 中运行 System.gc();按照建议避免错误。

但仍然记录了错误。我在 Tomcat 演示中看到这是已知错误,因为 JarURLConnection 锁是由 JAXBContext.newInstance() 创建的,显然这可以通过禁用缓存来避免,但这对我没有任何作用。 http://people.apache.org/~markt/presentations/2010-11-04-Memory-Leaks-60mins.pdf

关于如何修复在 Tomcat 上运行的 JAXB 中的此内存泄漏的任何其他建议。

这是错误日志:

SEVERE: The web application [/myApplication] created a ThreadLocal with key of type [com.sun.xml.bind.v2.ClassFactory$1] (value [com.sun.xml.bind.v2.ClassFactory$1@6a724da1]) and a value of type [java.util.WeakHashMap] (value [{class my.package.model.layout.Element=java.lang.ref.WeakReference@7646bb9f, class my.package.model.layout.ScriptBeforeFileID=java.lang.ref.WeakReference@1dc80063, class my.package.model.layout.OutputProperty=java.lang.ref.WeakReference@359172db, class my.package.model.layout.Data=java.lang.ref.WeakReference@600ba356, class my.package.model.layout.InputProperty=java.lang.ref.WeakReference@1c10945d, class my.package.model.layout.ToPort=java.lang.ref.WeakReference@47c7410, class my.package.model.layout.ConfigFile=java.lang.ref.WeakReference@6a7c8bd, class my.package.model.layout.LayoutInstanceID=java.lang.ref.WeakReference@716bf3b4, class my.package.model.layout.ScriptAfterFunction=java.lang.ref.WeakReference@664ce898, class be.securit.trustbuilder.config.model.........}]) 
but failed to remove it when the web application was stopped.
Threads are going to be renewed over time to try and avoid a probable memory leak.
17-sep-2013 15:21:45 org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks

最佳答案

回顾所有不同的帖子后,我注意到有人提到将 JAXB 库放入 Tomcat 的共享库中。所以我从我的应用程序 WEB-INF/lib 中删除了 jaxb-impl-x.x.x.jar 并将其放入 [TomcatHome]/lib。现在一切都很好。不确定这是最好的,因为现在在 Tomcat 下安装时需要不同的方法。

关于java - Tomcat 和 JAXB 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18851516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com