2010-07-15 29 views
1

我有一個Tomcat Java web應用程序,它在加載時抖動Java GC。我認爲這是由於大量短壽命物體和未知數量的中等壽命物體的組合。如何生成Java對象生存期的直方圖

爲了驗證這個理論,我想找到一個工具,它可以讓我確定所有分配的對象(或每10個對象等的更好性能)的對象生存期。理想情況下,最終輸出將是一個直方圖,顯示生活在不同時間量的對象的相對數量。

我認爲這個工具可能會構建在Instrumentation API或JVMTI之上。如果沒有好的工具已經這樣做了,那麼我也會很高興在編寫這樣一個工具時最好使用哪個JVM的接口。

+0

您是否嘗試過JMX + VisualVM?還是探針? – 2010-07-15 18:46:45

+0

也在代碼上運行靜態代碼分析器。這可能會指出一些關切的領域。 – 2010-07-15 18:50:29

+0

一個不錯的免費分析器是Eclipse內存分析器(您不必安裝Eclipse)。 重新啓動應用程序後,它表現良好一段時間還是它開始跳出門?後者可能表明你只是沒有足夠的內存可用。 – Preston 2010-07-15 19:44:34

回答

0

我現在已經開始編寫一個工具來完成我最初詢問的內容。當前的代碼可以在這裏找到:

http://wiki.github.com/mchr3k/org.inmemprofiler/

到目前爲止,我已經設法通過實例計數的所有對象分配的文本直方圖。這不包括處理不同的數組分配。

我現在正在通過使用JVMTI來追加實例大小信息以及跟蹤數組分配。

+0

此工具現在可以跟蹤對象大小和分配軌跡。 – mchr 2010-08-28 18:50:16