本文介绍了使用JVisualVM从Java中的远程应用程序获取堆转储的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我运行JVisualVM(Windows XP,Sun Java 1.6.0.13,32位客户端VM)来监控远程应用程序(Linux,Sun Java 1.6.0.07,64位服务器VM)。在启动实际的远程应用程序之前,我使用所有访问策略在远程计算机 jstatd 上启动:

I run JVisualVM (Windows XP, Sun Java 1.6.0.13, 32 bit client VM) to monitor a distant application (Linux, Sun Java 1.6.0.07, 64 bit server VM). Before starting the actual remote application, I launch on the remote machine jstatd using an all access policy:

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

然后我使用命令行启动实际的应用程序

Then I start the actual app using the command line

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

从客户端机器,我可以看到遥远的应用程序并监控它。我也可以进行线程转储等。遗憾的是,堆转储按钮显示为灰色。

From the client machine, I can see the distant app and monitor it. I can also make a thread dump etc. Unfortunately, the heap-dump button is grayed out.

如何使用JVisualVM从远程监控的应用程序获取堆转储?

How can I obtain a heap-dump from a remotely monitored application using JVisualVM?

我尝试使用jConsole 。使用jConsole,可以使用com.sun.management.HotSpotDiagnostic dumpHeap操作进行远程堆转储。我希望将转储传输到客户端并使用JVisualVM提供的工具进行分析。我怎么能这样做?

I tried using jConsole. With jConsole it is possible to make a distant heap dump using the com.sun.management.HotSpotDiagnostic dumpHeap operation. I want the dump to be transferred to the client side and analyzed using the tools provided by JVisualVM. How can I do this?

推荐答案

有办法做到这一点!


  1. rmiregistry -J-Xbootclasspath / p:$ JAVA_HOME / lib / sa-jdi.jar(这使用端口1099)

  2. start'jsadebugd'在应用程序运行的机器上:jsadebugd& (JVM的pid)


  3. 之后的远程机器上使用jmap -dump:file =:1099

  1. rmiregistry -J-Xbootclasspath/p:$JAVA_HOME/lib/sa-jdi.jar ( this uses port 1099)
  2. start 'jsadebugd' on the machine in which application is running: jsadebugd & (pid of JVM)
  3. On remote machine use followingjmap -dump:file= :1099

jhat

上述内容将在7000端口启动Web应用程序

The above will start a web application at port 7000

以上所有工具都是JDK 1.6的一部分

All the above tools are part of JDK 1.6

一切顺利!

这篇关于使用JVisualVM从Java中的远程应用程序获取堆转储的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-27 06:39
查看更多