生产环境应该使用HeapDumpBeforeFullGC吗?

Should HeapDumpBeforeFullGC be used in production environment?

full gc发生后,我们可能想知道它是如何发生的。没有heap dump,我觉得很难做到,但是在生产环境中,我们通常不能及时获取。所以我想在我的应用程序在线运行时使用HeapDumpBeforeFullGC

我的问题是HeapDumpBeforeFullGC是否应该在产品环境中使用?它会带来一些不好的影响吗(如果我们不考虑磁盘使用)? 或者我们有没有其他有效的方法来查找导致生产环境中 full gc 的原因?

谢谢!

如果您认为完整 GC 是生产中的一个问题,那么是的,添加堆转储可能会有所帮助。但这会使 Full GC 的暂停时间变得更糟。

作为替代方案,您可以打开详细的 GC 日志记录,这通常是识别一般原因(堆大小不足、泄漏、分配峰值、配置错误、交换等)的良好开端。您还可以使用侵入性较小的分析器(例如 async-profiler 或 jmc)来发现过度分配