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

emd*_*hie 11 java heap-dump tomcat7

我试过这个从Tomcat 6获取JVM上的一个 堆转储,但它对我不起作用,还有其他方法从tomcat服务器获取堆转储吗?提前致谢!

Tak*_*aky 21

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

jmap -dump:file=/mnt/heapdump_2013-04-01.data 29842
Run Code Online (Sandbox Code Playgroud)

使用jps来了解java Pid.


您还可以通过jvisualvm进行堆转储.您可以通过jmxjstatd连接到远程计算机.您可以在远程计算机上进行堆转储和存储.

分析heapdumps可以建议你:MAT.非常强大的工具,可以让您快速了解问题.你可以找到这里良好的企口的MAT.


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


pie*_*t.t 5

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

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

参数:

outputFile - 依赖于系统的文件名

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

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