如果应用程序处于 GC 中,如何可靠地获取 JVM 核心转储?

2023-12-22

我正在尝试查找 java 应用程序中内存泄漏的原因。我需要为某个进程获取堆转储longGC 循环。 Jmap 在这种情况下不起作用,因为应用程序被挂起,而且堆非常大。

不幸的是,jmap 在我获取的核心转储上抛出 UnknownOopException。我认为在 GC 期间进行核心转储是不正确的。有什么方法可以在正确进行核心转储时暂停java进程吗?

或者我完全错了,因为其他问题而导致核心转储损坏?


执行 GC 时无法进行堆转储。您需要在 GC 之前或之后进行堆转储。如果您想知道为什么需要这么长时间,那么确定哪个阶段花费了这么长时间是有用的。要看到这个添加-verbosegc这将指示是否需要很长时间才能到达安全点、复制对象、扫描长期空间、检查引用或其他操作。

这可能会花费一些时间,因为您有很多物体需要清理。据猜测,在最坏的情况下,每 2 GB 堆对象大约需要 1 秒。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果应用程序处于 GC 中,如何可靠地获取 JVM 核心转储? 的相关文章

随机推荐