我们在服务器上面临 GC开销限制异常,我们无法进行堆和线程转储,因为它提供了一些异常。如何解决这个问题?有人可以帮忙吗。
答案 0 :(得分:0)
启用-XX:+ HeapDumpOnOutOfMemoryError并自动创建转储。
答案 1 :(得分:0)
获取堆和线程转储的正常方式依赖于JMX和所谓的VM操作。
GC本身就是一个虚拟机操作,所以在完成下一次虚拟机操作无法启动之前(JMX是用Java实现的,因此它也会被阻止作为停止世界暂停的一部分)。
您可以尝试在JDK暂停中使用-F选项far jstack
和jmap
命令。强制模式使用OS调试功能来访问JVM进程内存,并且不需要"合作"来自JVM进程。
-XX:+HeapDumpOnOutOfMemoryError
是另一种选择。
最后,您可以使用特定于操作系统的核心转储,然后使用指向核心转储的jstack
或jmap
将其转换为Java格式。