Java 如何仅使用JRE生成堆转储?

Java 如何仅使用JRE生成堆转储?,java,heap-dump,Java,Heap Dump,我们在生产环境中安装了JRE,但没有安装JDK。JRE和OS的版本如下所示 [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 Li

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

[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
看起来系统上的任何地方都没有
jmap
工具,如果没有root访问权限,我无法在任何系统位置安装它。如何获得堆转储(即生成
.hprof
文件)


此外,我们正在使用JBoss 7.1.3。这似乎很重要。

内置工具,如
jmap
jconsole
jvisualvm
仅在JDK中可用。另一个选项是添加VM参数
-XX:+heapdumponautofmemoryerror
,它告诉JVM在发生OutOfMemoryError时自动生成堆转储,并添加参数
-XX:HeapDumpPath
来指定堆转储的路径


如果不能升级JRE来使用服务器JRE 7()中的工具,则可能需要考虑第三方分析工具,比如“或”列表。

< P>唯一的方法似乎是将本地SDK6压缩并放到服务器上的某个地方。然后打开一个远程控制台,并从该SDK的bin目录中转储JRE

如果你的客户端禁止上传可执行文件,那你当然就倒霉了。

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

jattach PID-OF-JAVA转储堆


如果您想重定向,但必须通过命令行运行流程。

我认为您需要JDK,让我们拭目以待,看看是否有其他解决方案。从jre 7开始,oracle提供了一个包含这些工具的服务器jre程序集。很高兴知道。目前不允许不定期地升级我们的JRE。您是否能够通过JMX端口连接到生产环境?除了jmap之外,我还可以使用其他工具来生成堆转储。问题是我必须能够从我的主目录运行它。也许第三方分析器在这里会有用。答案已更新。
 kill -3 <pid>
-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=~/jvm.log