我正在尝试捕获在我们的 Java 应用程序中发生的完整 GC。到目前为止,我有两种方法,都有缺陷:
当我收到 GC 通知时,可以查询 GC MXBeans,然后检查是否已执行 GC 的混合方法是可能的。这样做的缺点是 No GC 原因可能仍会在“主要 GC”结束时触发,并导致逻辑更加复杂。
我真正想要的是应用程序由于 GC 操作而暂停的总时间。我认为捕获完整的 GC 将足以表明应用程序已经停止了一段时间,因此如果我们检测到频繁的 GC,我们知道有大量使用或应用程序将很快耗尽内存。是否有更好的解决方案来检测 GC 时间以及是否有完整的 GC?
编辑:明确地说,我想在给定的 JVM 中捕获此信息。这个 JVM 由一个单独的团队控制,我们没有必要控制他们将设置的 JVM 参数,我们只能提出建议。这个想法类似于飞行记录器,但它是向管理员实时提供信息。