如何从运行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冻结一段时间。
我推荐visual VM http://visualvm.java.net/它是一个可以连接到tomcat,创建和读取堆转储,创建线程转储,cpu和内存采样器的一体化工具。
如果您使用新的jdk 1.7,VisualVM已经打包在您的jdk文件夹中。