Java 仅在Windows上从JRE获取堆转储
我们的产品在客户的服务器上运行,在Windows上只有一个JRE(没有JDK) 我知道我可以通过标志在OutOfMemoryError上获得堆转储 但是,有没有办法主动从JRE JVM进程获取堆转储 我计划得到一些健康的堆转储,并将它们与OutOfMemoryError上获得的堆转储进行比较 最好,我应该能够要求客户下载此工具/实用程序,然后在服务器上运行它,以随意获得堆转储 我试过了,但是jvisualvm没有列出我们的产品jVM。它只列出当时运行的一些JVM,而不是当时运行的所有JVM。另外,jvisualvm非常庞大 注意:是否有第三方实用程序可以在JVM主机上执行以转储堆?此外,客户此时无法升级JRE。前面问题的答案中没有一个被选为答案 谢谢,Java 仅在Windows上从JRE获取堆转储,java,jvm,heap-dump,heap-profiling,Java,Jvm,Heap Dump,Heap Profiling,我们的产品在客户的服务器上运行,在Windows上只有一个JRE(没有JDK) 我知道我可以通过标志在OutOfMemoryError上获得堆转储 但是,有没有办法主动从JRE JVM进程获取堆转储 我计划得到一些健康的堆转储,并将它们与OutOfMemoryError上获得的堆转储进行比较 最好,我应该能够要求客户下载此工具/实用程序,然后在服务器上运行它,以随意获得堆转储 我试过了,但是jvisualvm没有列出我们的产品jVM。它只列出当时运行的一些JVM,而不是当时运行的所有JVM。另外
com.sun.management.HotSpotDiagnosticXbean
:
HotSpotDiagnosticMXBean hs =
ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class);
hs.dumpHeap("/path/to/heapdump.bin", false);
我为此编写了一个小型实用程序,请参见 使用
make
生成程序,然后运行
jattach <PID> dumpheap /path/to/heapdump.bin
jattach dumpheap/path/to/heapdump.bin
我看到了那个问题。考虑到2年前有人问过这个问题,我想看看是否有实用程序等可以完成任务。jattach是否会转储一个.hprof?我尝试在cygwin/windows上构建,但无法实现。我正在github中为同一问题创建问题。@anjanb是的,它转储.hprof,与jmap完全相同。我已经为Windows添加了jattach实现。谢谢。我会测试它,让你知道它是否适合我。