JConsole线程选项卡 - 了解信息

问题描述:

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

名称:的WorkManager(2)-92 状态:等待java.u[email protected]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) java.lang.Thread.run(Thread.java:619)

感谢, 杆

该线程长相就像它正在等待getTask()一样,即它只是在等待一些工作要做。

新的线程会随着请求进入而产生,除非有大量线程忙于实际工作,否则不应该担心。

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

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

我建议你从jvisualvm开始分析。你会得到超过图表堆的使用情况,线程,垃圾收集等

的时候你也可以采取堆转储与jmap,然后用jhatmat分析。