2009-08-12 57 views
0

與Java控制檯應用程序的工作,我可以這樣做:如何在Java WebStart(JNLP)應用程序中獲得多個hprof轉儲?

java -agentlib:hprof=heap=dump,format=b MyClass 

然後我可以打CTRL- \(或在Windows上使用CTRL-Break)任何時候,我想借堆的快照後分析。

我想爲Java Web Start應用程序做同樣的事情,但我似乎無法得到它的工作。我可以通過JAVAWS_VM_ARGS環境變量傳遞agentlib參數,但在控制檯中輸入ctrl- \和ctrl-break似乎沒有任何作用。我得到的只是一個轉儲,當程序啓動時,這並不是很有趣,因爲那時我甚至還沒有登錄到我們的程序,並執行了我想分析的事務。

回答

0

您可以使用VisualVM從正在運行的應用程序進行堆轉儲。 VisualVM允許您瀏覽並保存堆轉儲。

+0

很酷......這包括在Java 1.6.0_7和更高版本...... – skiphoppy 2009-08-13 21:15:17

+0

不幸的是,它似乎我們的Java Web當我嘗試使用VisualVM分析其內存時,啓動應用程序崩潰。 – skiphoppy 2009-08-14 18:01:00

1

起始於以下JMV參數的應用,實現了JMX並在端口9004啓動監聽器:

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port="9004" 
-Dcom.sun.management.jmxremote.authenticate="false" 
-Dcom.sun.management.jmxremote.ssl="false" 

然後看看這個Java程序,它可以對JMX服務器的連接,並採取按需堆轉儲。源代碼包含評論,其中鏈接到互聯網上的兩篇有用的文章,幫助我完成所有這些工作。祝你好運 !

鏈接:JmxHeapDumper.java

P.S.顯然讓JMX開始爲WebStart應用程序是棘手的,我發現這個討論,希望它有幫助:http://forums.java.net/jive/message.jspa?messageID=311717

相關問題