2009-10-21 37 views
2

我正在運行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)

感謝, 杆

回答

1

該線程長相就像它正在等待getTask()一樣,即它只是在等待一些工作要做。

新的線程會隨着請求進入而產生,除非有大量線程忙於實際工作,否則不應該擔心。

內存使用量將隨着時間的推移而增長,直到JVM決定垃圾收集其中的一部分。如果它不斷增長,並且從jconsole運行GC沒有任何區別,那麼可能會出現內存泄漏。發現泄漏可能很困難,但您可以使用MAT以使其更容易。

0

您將通過從JDK1.6或JDK1.7運行JConsole來了解更多信息。 JDK1.5中的JConsole.exe是「老派」的。

0

我建議你從jvisualvm開始分析。你會得到超過圖表堆的使用情況,線程,垃圾收集等

的時候你也可以採取堆轉儲與jmap,然後用jhatmat分析。