如何从运行tomcat 7获取堆转储

时间:2013-11-27 06:54:42

标签: java tomcat7 heap-dump

我试过这个Get a heapdump on JVM from Tomcat 6 但它对我不起作用,是否还有其他方法可以从tomcat服务器获取堆转储?提前谢谢!

3 个答案:

答案 0 :(得分:20)

获取堆转储的最简单方法是使用jmap。在带有java进程的机器上执行jmap命令。用法示例:

jmap -dump:file=/mnt/heapdump_2013-04-01.data 29842

使用jps来了解java Pid。


您也可以通过jvisualvm进行堆转储。您可以通过jmxjstatd连接到远程计算机。您可以将heapdump和store存储在远程计算机上。

分析堆转储可以建议你:MAT。非常强大的工具,可以让您快速了解问题。你可以在MAT找到here好的inro。


如果您不想长时间停止申请,可以进行二进制转储(You can use gcore or gdb)。你可以use jmap to analyze gdb dump。您可以在atlassian blog上阅读更多信息。谨防some issues

答案 1 :(得分:5)

除了“转储堆”之外的另一种方式 - jvisualvm的按钮是通过JMX接口。这种方式甚至允许您指定存储转储的位置。

使用jconsole或jvisualvm与JMX-plugin连接到tomcat的JMX服务器。然后到com.sun.management - > HotSpotDiagnotic - > Operations。在dumpHeap旁边填写两个参数。从oracle的文档(参见here):

  

参数:

     

outputFile - 依赖于系统的文件名

     

live - 如果true,则仅转储活动对象,即可从其他人访问的对象

然后按dumpHeap并在写入转储时观察VM冻结一段时间。

答案 2 :(得分:1)

我推荐visual VM http://visualvm.java.net/它是一个可以连接到tomcat,创建和读取堆转储,创建线程转储,cpu和内存采样器的多功能工具。

如果您使用新的jdk 1.7,VisualVM已经打包在您的jdk文件夹中。