我试过这个Get a heapdump on JVM from Tomcat 6 但它对我不起作用,是否还有其他方法可以从tomcat服务器获取堆转储?提前谢谢!
答案 0 :(得分:20)
获取堆转储的最简单方法是使用jmap。在带有java进程的机器上执行jmap命令。用法示例:
jmap -dump:file=/mnt/heapdump_2013-04-01.data 29842
使用jps来了解java Pid。
您也可以通过jvisualvm进行堆转储。您可以通过jmx或jstatd连接到远程计算机。您可以将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文件夹中。