我已经尝试过这个Get a heapdump on JVM from Tomcat 6,但它对我不起作用,有没有其他方法可以从tomcat服务器获取堆转储?提前感谢!
发布于 2013-11-27 15:02:38
获取堆转储的最简单方法是使用jmap。在运行java进程的机器上,执行jmap命令。用法示例:
jmap -dump:file=/mnt/heapdump_2013-04-01.data 29842使用jps了解java Pid。
您还可以通过jvisualvm进行堆转储。您可以通过jmx或jstatd连接到远程计算机。您可以在远程机器上进行堆转储和存储。
分析堆转储可以给你一些建议:MAT。非常强大的工具,可以让你快速了解问题。你可以在垫子上找到很好的here。
如果您不想长时间停止应用程序,可以进行二进制转储(You can use gcore or gdb)。你可以使用use jmap to analyze gdb dump。您可以在atlassian blog上阅读更多信息。当心some issues。
发布于 2013-11-27 15:11:15
除了jvisualvm的“转储堆”-Button之外,另一种方法是通过JMX接口。这种方式甚至允许您指定存储转储的位置。
使用jconsole或带有JMX-plugin的jvisualvm连接到tomcat的JMX-server。然后转到com.sun.management -> HotSpotDiagnotic -> Operations。在dumpHeap旁边填写两个参数。来自oracle的文档(请参阅here):
参数:
outputFile -系统相关的文件名
live -如果为true,则仅转储活动对象,即可从其他人访问的对象
然后按dumpHeap键,观察VM在写入转储时冻结一段时间。
发布于 2015-07-06 13:24:14
我推荐visual VM http://visualvm.java.net/它是一个可以连接到tomcat,创建和读取堆转储,创建线程转储,中央处理器和内存采样器的一体化工具。
如果您使用新的JDK1.7,VisualVM已经打包在您的jdk文件夹中。
https://stackoverflow.com/questions/20235802
复制相似问题