2009-09-23 31 views
3

我想爲我在unix上運行的獨立Java程序設置一個內存泄漏問題。我有端口和參數設置,以便我可以使用帶JConsole或VisualVM的JMX連接到它。是否有Java的遠程分析器? (最好使用JMX)

這些幫助一點點,但不幸的是,它不告訴你內存已經走了,它只告訴你有多少內存使用。我正在尋找更詳細的探查器來幫助我找到正在消耗我的記憶的物體。有人有主意嗎?最好在JMX端口上進行會談,因此我不必重新配置程序。謝謝!

+0

@erotsppa:你以前的問題似乎有很多好的答案。我可以建議你重新考慮它們,並在適當的地方接受最好的答案嗎? – 2009-09-23 23:02:07

回答

0

我看了幾個,最喜歡YourKit

這是迄今爲止最容易使用並且與JMX一起使用的最佳工具。

+0

我剛剛下載了Yourkit,它不適用於JMX。它需要我單獨做手動設置,這是無證的,非常困難! – erotsppa 2009-09-24 02:31:25

+0

對不起,您無法使用JMX工作。 – 2009-09-24 05:30:32

+0

你可以給我一些關於如何與JMX連接的指針嗎?這不可能嗎? – erotsppa 2009-09-24 13:50:38

0

呃......實際上,VisualVM有一個excellent memory profiler,它可以告訴你不只是哪些對象吃掉了你的記憶,而且還可以告訴你它們在哪裏(可能是無意中)被引用。

只需按監視器選項卡上的「堆轉儲」按鈕,並感到驚訝!

+0

堆轉儲不適用於遠程JVM – erotsppa 2009-09-23 20:05:33

+0

嗯,這是一個恥辱。你不能在同一臺機器上運行VisualVM嗎? – 2009-09-23 20:10:04

+0

在這種情況下,只需從命令行使用jmap來轉儲堆,然後在任何你想要的機器上分析它。 – 2009-09-23 21:06:06

3

如果有問題的機器已經安裝了X11的客戶端庫,您使用Sun的Java 6u10中或更高版本的可達SSH服務器允許X11轉發,在本地機器上運行X11服務器(也許http://sourceforge.net/projects/xming/) AND,你可以用ssh(-X或-Y)進入Linux機器,運行jvisualvm 那裏,同時在你的本地機器上顯示它的GUI界面。

在同一臺機器上運行允許jvisualvm直接連接到正在運行的Java進程,而不是執行各種配置voodoo。