Jim*_*Jim 16 java multithreading tomcat jaxb java-ee
我在Tomcat 7中有一个Web应用程序.
当我关闭Tomcat时,我看到了这些警告(但并非总是如此)
SEVERE: The web application [/MyApplication] created a ThreadLocal
with key of type
[org.apache.xml.security.algorithms.MessageDigestAlgorithm$1] (value
[org.apache.xml.security.algorithms.MessageDigestAlgorithm$1@2e2c2e2c])
and a value of type [java.util.HashMap] (value
[{http://www.w3.org/2000/09/xmldsig#sha1=MESSAGE DIGEST SHA-1}]) 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.
Apr 3, 2012 1:56:19 PM org.apache.catalina.loader.WebappClassLoader
checkThreadLocalMapForLeaks 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@25442544]) and a value of type
[java.util.WeakHashMap] (value [{class
com.classes.internal.ContactType=java.lang.ref.WeakReference@17eb17eb,
class
javax.xml.bind.annotation.adapters.HexBinaryAdapter=java.lang.ref.WeakReference@178a178a,
class
com.classes.internal.xjc.ListType=java.lang.ref.WeakReference@181c181c,
class
com.classes.internal.xjc.MessageType=java.lang.ref.WeakReference@17711771,
class
com.classes.internal.xjc.MessageType=java.lang.ref.WeakReference@17011701}])
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. Apr 3, 2012 1:56:19 PM
org.apache.catalina.loader.WebappClassLoader
checkThreadLocalMapForLeaks SEVERE: The web application
[/MyApplication] created a ThreadLocal with key of type
[org.apache.xml.security.utils.UnsyncBufferedOutputStream$1] (value
[org.apache.xml.security.utils.UnsyncBufferedOutputStream$1@4a904a90])
and a value of type [byte[]] (value [[B@67486748]) 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.
Run Code Online (Sandbox Code Playgroud)
这些警告在catalina.out关闭时意味着什么?
我看到我提到的一些JAXB类,但不知道这里有什么问题.
有什么帮助吗?
esa*_*saj 24
简而言之,一些ThreadLocals尚未正确清理.大多数(如果不是全部)J2EE服务器/应用程序容器使用线程池来处理传入请求和其他任务,以防止始终开始新线程的开销.问题是某些库(以及你自己,如果你不知道更好)在任务/请求执行结束后不清理他们的ThreadLocals.
通常,当线程在执行结束时死亡时,不再引用存储在ThreadLocals中的对象,垃圾收集器负责删除这些对象:
只要线程处于活动状态且ThreadLocal实例可访问,每个线程都会保存对其线程局部变量副本的隐式引用; 在一个线程消失之后,它的所有线程局部实例副本都要进行垃圾收集(除非存在对这些副本的其他引用).
但是当从线程池中获取线程时,它不会死亡,而是返回到池中.由于线程仍处于活动状态,因此引用的ThreadLocals也是如此.当使用相同的ThreadLocal并且之前使用处理请求/任务的线程时,这表现为内存泄漏和从一个请求到另一个请求的"泄漏".
Mar*_*mas 14
您的应用程序中有一个或多个内存泄漏.有关这些问题的完整解释,哪些是您的错,以及您可以采取哪些措施来修复它们,请参阅此演示文稿:http: //people.apache.org/~markt/presentations/2010-11-04-Memory-Leaks -60mins.pdf
Rob*_*obV 10
至少有一条JAXB消息似乎与已知错误有关:
org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks严重:Web应用程序[/ MyApplication]使用[com.sun.xml.bind.v2.ClassFactory $ 1]类型的键创建了一个ThreadLocal(值[com.sun.xml.bind] .v2.ClassFactory $ 1 @ 25442544])和类型为[java.util.WeakHashMap]的值
请参阅JAXB-563和JAXB-831(注意 - 这些是在java.net上,需要登录才能查看).第一个错误被认为是固定的,但正如其他人所评论的那样,并没有完全修复.第二个错误有一个建议的解决方法是让上下文关闭它的确可以缓解这个问题(虽然不能消除它完全)之前强制GC() -你可以使用自定义ServletContextListener,并简单地调用System.gc()的contextDestroyed()方法.
至于其他错误,你需要遵循其他答案建议并做一些严肃的调试.
| 归档时间: |
|
| 查看次数: |
53218 次 |
| 最近记录: |