我遇到了一个java.lang.OutOfMemoryError: GC Overhead limit exceeded的问题,但我的应用程序没有HeapDumpOnOutOfMemoryError命令行选项。我需要一个堆转储,但当我试图使用jmap或jcmd工具捕获堆转储时,它们没有响应:
jmap
进程未完成,但已创建了转储文件。当我用VisualVM打开它们时,它们会无限加载。
如果我捕获VisualVM的堆转储文件,工具会成功完成并创建并打开转储文件。
请问为什么jmap和jcmd无法完成?如何在应用程序出现OutOfMemoryError异常时捕获转储文件?应用程序仍在运行,但只有几个活动线程。
jmap
D:\program>jmap -dump:live,format=b,file=d:\dump4.hprof 8280
Dumping heap to D:\dump4.hprof ...
jcmd
D:\program>jcmd 8280 GC.heap_dump d:\dump6.hprof
8280:
进程未完成,但已创建了转储文件。当我用VisualVM打开它们时,它们会无限加载。
如果我捕获VisualVM的堆转储文件,工具会成功完成并创建并打开转储文件。
请问为什么jmap和jcmd无法完成?如何在应用程序出现OutOfMemoryError异常时捕获转储文件?应用程序仍在运行,但只有几个活动线程。