GC开销限制异常:无法获取线程和放大器堆转储

时间:2017-06-23 07:17:52

标签: java gcc garbage-collection out-of-memory

我们在服务器上面临 GC开销限制异常,我们无法进行堆和线程转储,因为它提供了一些异常。如何解决这个问题?有人可以帮忙吗。

2 个答案:

答案 0 :(得分:0)

启用-XX:+ HeapDumpOnOutOfMemoryError并自动创建转储。

答案 1 :(得分:0)

获取堆和线程转储的正常方式依赖于JMX和所谓的VM操作。

GC本身就是一个虚拟机操作,所以在完成下一次虚拟机操作无法启动之前(JMX是用Java实现的,因此它也会被阻止作为停止世界暂停的一部分)。

您可以尝试在JDK暂停中使用-F选项far jstackjmap命令。强制模式使用OS调试功能来访问JVM进程内存,并且不需要"合作"来自JVM进程。

如果JVM实际上与OOME崩溃,则

-XX:+HeapDumpOnOutOfMemoryError是另一种选择。

最后,您可以使用特定于操作系统的核心转储,然后使用指向核心转储的jstackjmap将其转换为Java格式。