如何生成仅包含 JRE 的堆转储?

2022-09-03 01:14:06

我们在生产环境中安装了 JRE,但没有安装在 JDK 上。JRE 和操作系统的版本如下所示。

[me@mymachine ~]$ java -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
[me@mymachine ~]$ uname -a
Linux mymachine.mydomain.com 3.10.35-43.137.amzn1.x86_64 #1 SMP Wed Apr 2 09:36:59 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

看起来好像该工具不存在于系统上的任何位置,如果没有root访问权限,我无法将其安装在任何系统位置。我该怎么做才能获得堆转储(即生成文件)?jmap.hprof

此外,如果这很重要,我们正在使用JBoss 7.1.3.AS。


答案 1

使用jattach,这是由JVM黑客Andrei Pangin创建的工具。它很小(24KB),只能与JRE一起使用,并支持Linux容器。

jattach PID-OF-JAVA dumpheap <path to heap dump file>


答案 2

内置工具,如 、 和,仅在 JDK 中可用。另一种选择是添加 VM 参数,该参数告诉 JVM 在发生 OutOfMemoryError 时自动生成堆转储,并添加参数以指定堆转储的路径。jmapjconsolejvisualvm-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath

如果无法升级 JRE 以使用服务器 JRE 7 (http://www.oracle.com/technetwork/java/javase/downloads/server-jre7-downloads-1931105.html) 中的工具,则可能必须考虑使用 JProfiler 等第三方分析工具或此处列出的工具。


推荐