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

我已经尝试过从Tomcat 6获取JVM上的堆转换但是它对我不起作用,是否有其他方法可以从tomcat服务器获取堆转储? 提前致谢!

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

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

使用jps来了解java Pid。


您还可以通过jvisualvm进行堆转储。 您可以通过jmx或jstatd连接到远程计算机。 您可以在远程计算机上进行heapdump和store。

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


如果您不想长时间停止应用程序,可以进行二进制转储( 可以使用gcore或gdb )。 您可以使用jmap来分析gdb转储 。 您可以在atlassian博客上阅读更多信息。 注意一些 问题 。

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

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

参数:

outputFile – 依赖于系统的文件名

live – 如果true,则只转储活动对象,即可以从其他对象访问的对象

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