2009-04-07 44 views
10

我運行JVisualVM(Windows XP,Sun Java 1.6.0.13,32位客戶端VM)來監視遠程應用程序(Linux,Sun Java 1.6.0.07,64位服務器VM )。開始實際的遠程應用程序之前,我在遠程機器jstatd上推出使用全訪問策略:使用JVisualVM從Java遠程應用程序獲取堆轉儲

grant codebase "file:${java.home}/../lib/tools.jar" { 
    permission java.security.AllPermission; 
}; 

然後我用命令行

java -Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.port=3333 
compileTest.Main 

從客戶機開始實際應用,我可以看到遙遠的應用並監控它。我也可以做一個線程轉儲等。不幸的是,堆轉儲按鈕是灰色的。

如何使用JVisualVM從遠程監控的應用程序獲取堆轉儲?

我試過使用jConsole。使用jConsole,可以使用com.sun.management.HotSpotDiagnostic dumpHeap操作創建遠程堆轉儲。我想將轉儲轉移到客戶端並使用JVisualVM提供的工具進行分析。我怎樣才能做到這一點?

+0

運行jvisualvm爲正在運行的Java進程可能有助於 – rogerdpack 2012-10-02 16:26:26

+0

@rogerdpack好點相同的用戶!我導航到這個問題/主題,因爲我有同樣的問題,http://stackoverflow.com/questions/8799929/visualvm-unable-to-sampler-memory,我認爲你的陳述/假設是正確的。當我在我的開發人員PC /服務器上通過NetBeans IDE運行tomcat/tomee時,啓用了Sampler> Memory按鈕,但在生產服務器上禁用了Sampler> Memory按鈕,因爲tomcat/tomee作爲Windows服務運行, '不'作爲系統或本地服務登錄到生產服務中。 :( – Howard 2013-04-06 13:55:55

回答

0

您無法遠程分析堆。您可以在您的服務器上運行visualvm並將x會話導出到本地計算機。你必須在你的服務器上安裝x11,而許多服務器不需要。

3

不幸的是,沒有一種自動化的方法來做到這一點。您必須在Linux服務器上手動運行jmap以轉儲堆的JVM,然後將生成的堆轉儲複製到運行JVisualVM的本地計算機,然後使用File | Load ...將堆轉儲裝入JVisualVM進行分析。

6

有辦法做到這一點!

  1. rmiregistry中-J-Xbootclasspath/P:$ JAVA_HOME/LIB/SA-jdi.jar(此使用端口1099)
  2. 啓動 'jsadebugd',其中應用程序運行在計算機上:jsadebugd &(PID JVM的)
  3. 在遠程機器使用以下 JMAP -dump:文件=:1099

  4. 與jHat

以上將在端口啓動一個Web應用程序7000

以上所有的工具都JDK 1.6

的一部分

所有最優秀的!

2

自1.3,支持的VisualVM遠程堆轉儲:

與VisualVM的1.3開始,你現在可以使用堆轉儲在工具的操作和按鈕,以充分利用遠程運行應用程序堆轉儲。當被調用時,會顯示一個對話框,使您可以指定想要轉儲堆的遠程系統上的完整路徑。創建堆轉儲後,需要手動將文件複製到本地計算機,並使用Load操作使用VisualVM打開和分析文件。

參見:VisualVM 1.3 Released

相關問題