我正在运行JBoss 5.我发现随着时间的推移,内存保持不断增加。 活动线程数正在增加。以下堆栈跟踪取自活动线程,该活动线程是许多线程之一(这些线程是作为时间传递添加的线程)。 我可以从堆栈跟踪中学到什么?我怎样才能更深入地了解正在发生的事情?

名称:WorkManager(2)-92 状态:在java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4e2e52上等待 总被阻止:1总等待:1

堆栈跟踪: sun.misc.Unsafe.park(原生方法) java.util.concurrent.locks.LockSupport.park(LockSupport.java:158) java.util.concurrent.locks.AbstractQueuedSynchronizer中的$ ConditionObject.await(AbstractQueuedSynchronizer.java:1925) java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358) java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947) java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:907) java.lang.Thread.run(Thread.java:619)

谢谢, 杆

有帮助吗?

解决方案

该线程看起来正在等待getTask(),即它只是在等待一些工作要做。

新线程会在请求进入时生成,除非有大量线程忙于实际工作,否则不要担心它。

内存使用量会随着时间的推移而增长,直到JVM决定垃圾收集部分内容。如果它继续增长,并且从jconsole运行GC没有任何区别,那么你可能会发生内存泄漏。查找泄漏可能很困难,但您可以使用 MAT 来简化。

其他提示

通过从JDK1.6或JDK1.7运行JConsole,您将从中了解更多信息。 JDK1.5中的JConsole.exe是“old-school”。

我建议您首先使用 jvisualvm 。随着时间的推移,您将获得堆使用情况,线程,垃圾回收等图表。

您还可以使用 jmap进行堆转储,然后使用 jhat进行分析

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top