2

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

名称:WorkManager(2)-92 状态:WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4e2e52 阻塞总数:1 等待总数:1

堆栈跟踪:sun.misc.Unsafe.park(Native Method) 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章 619

谢谢, 罗德

4

3 回答 3

1

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

随着请求的到来,新线程将产生,除非有大量线程忙于实际工作,否则您不必担心。

内存使用量会随着时间的推移而增长,直到 JVM 决定对其中的一部分进行垃圾收集。如果它不断增长,并且从 jconsole 运行 GC 没有任何区别,则可能存在内存泄漏。查找泄漏可能很困难,但您可以使用MAT使其更容易。

于 2009-10-21T14:59:05.647 回答
0

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

于 2009-10-21T15:58:25.277 回答
0

我建议您首先使用jvisualvm进行分析。您将获得随时间推移的堆使用、线程、垃圾收集等图表。

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

于 2009-10-22T01:30:53.393 回答