我想爲我在unix上運行的獨立Java程序設置一個內存泄漏問題。我有端口和參數設置,以便我可以使用帶JConsole或VisualVM的JMX連接到它。是否有Java的遠程分析器? (最好使用JMX)
這些幫助一點點,但不幸的是,它不告訴你內存已經走了,它只告訴你有多少內存使用。我正在尋找更詳細的探查器來幫助我找到正在消耗我的記憶的物體。有人有主意嗎?最好在JMX端口上進行會談,因此我不必重新配置程序。謝謝!
我想爲我在unix上運行的獨立Java程序設置一個內存泄漏問題。我有端口和參數設置,以便我可以使用帶JConsole或VisualVM的JMX連接到它。是否有Java的遠程分析器? (最好使用JMX)
這些幫助一點點,但不幸的是,它不告訴你內存已經走了,它只告訴你有多少內存使用。我正在尋找更詳細的探查器來幫助我找到正在消耗我的記憶的物體。有人有主意嗎?最好在JMX端口上進行會談,因此我不必重新配置程序。謝謝!
NetBeans Java Profiler支持分析遠程JVM。可以讓NetBeans使用JMX連接到遠程JVM。
A presentation available on the JavaPassion site提供了一些關於如何入門的指南。
呃......實際上,VisualVM有一個excellent memory profiler,它可以告訴你不只是哪些對象吃掉了你的記憶,而且還可以告訴你它們在哪裏(可能是無意中)被引用。
只需按監視器選項卡上的「堆轉儲」按鈕,並感到驚訝!
堆轉儲不適用於遠程JVM – erotsppa 2009-09-23 20:05:33
嗯,這是一個恥辱。你不能在同一臺機器上運行VisualVM嗎? – 2009-09-23 20:10:04
在這種情況下,只需從命令行使用jmap來轉儲堆,然後在任何你想要的機器上分析它。 – 2009-09-23 21:06:06
如果有問題的機器已經安裝了X11的客戶端庫,您使用Sun的Java 6u10中或更高版本的可達SSH服務器允許X11轉發,在本地機器上運行X11服務器(也許http://sourceforge.net/projects/xming/) AND,你可以用ssh(-X或-Y)進入Linux機器,運行jvisualvm 那裏,同時在你的本地機器上顯示它的GUI界面。
在同一臺機器上運行允許jvisualvm直接連接到正在運行的Java進程,而不是執行各種配置voodoo。
@erotsppa:你以前的問題似乎有很多好的答案。我可以建議你重新考慮它們,並在適當的地方接受最好的答案嗎? – 2009-09-23 23:02:07