如何从远程服务器jvm获取堆转储?

时间:2014-12-29 14:43:14

标签: jvm heap-dump

如何从使用WL应用程序服务器在Linux上运行的远程 JVM 获取aheap转储?

当我在Windows机器上本地运行时,我知道如何获得转储。但是,如何从用户验收测试服务器获取转储?提前谢谢。

3 个答案:

答案 0 :(得分:3)

您可以使用JMX连接到远程应用程序服务器(应该提前启用)并使用允许进行堆转储的HotSpotDiagnostic MBean。 您可以使用JConsole或JVisualVM来调用MBean操作 Mike Haller的这个post描述了如何将此方法与JVisualVM一起使用。

答案 1 :(得分:2)

由于它是一个* -nix系统,如果你有必要的私有系统,那么使用 SSH 协议很容易连接:

  • 连接到远程计算机:

    ssh user@remote-machine-ip-address
    
  • 提示输入用户密码(应该是远程计算机上的用户密码,而不是当前系统用户的密码)。

  • 使用jmap实用程序生成堆转储(JDK二进制文件路径应该可用于您的系统PATH变量或使用它的完整路径):

    jmap -dump:format=b,file=cheap.bin <pid>
    

答案 2 :(得分:2)

有三个步骤:

  1. ssh到您的服务器
  2. ssh <your_user_name>@<remote_ip>

    1. jmap触发内存转储
    2. jmap -dump:format=b,file=<your_file_name> <your_jvm_pid>

      1. 通过jhat可视化堆(这里512m是大小限制,你可以设置它取决于泄漏的文件大小,如-J-Xmx2g)
      2. jhat -J-Xmx512m <your_file_name>

        jhat -port 7401 <your_file_name>

        我写了一篇博客来帮助分析性能问题:Performance Optimization