首页 > 解决方案 > 在此时间窗口中检测到内存耗尽的早期症状

问题描述

我正在努力理解新遗物引发的以下错误/警告:

在此时间窗口中检测到内存耗尽的早期症状。

以下是基于日志的配置文件图表。

新的遗物堆日志

新的遗物堆日志继续

我想了解:

  1. 为什么发生 Minor GC 时 Eden Space 永远不会完全清理?
  2. 根据日志中的 GC 行为,蓝色和黄色是否分别对应于主要 GC 和次要 GC?
  3. 为什么GC一直在收集?
  4. 红色区域是 New Relic 发出内存耗尽警报时。但是,堆还没有满。这会触发断路器转换到打开状态吗?

在向我们的任务执行器服务(例如:)提交新的 REST 调用时,我注意到了这种行为executorService.submit(() -> restconecto.post(..))。我尝试提交一个logger.info()并且它工作正常,但似乎进行长时间的投票是问题所在。以下是我的 GC 配置:

感谢您的任何见解。

标签: javagarbage-collectionnewrelic

解决方案


  1. 垃圾收集器是一个守护线程,在 JVM 启动时启动,当所有非守护线程停止时守护进程停止。GC 一直在运行,而应用程序永远不会清理的原因很可能是因为总有一些东西要收集(甚至可能是后台任务)。最终用户无法控制垃圾收集器。

  2. 真的不明白你的问题

  3. 见 1。

  4. 您的堆不必已满即可触发警报。默认情况下,遗物设置如下:

    Memory threshold: 20%
    Garbage collection CPU threshold: 10%
    

当然可以调整这些,但这些基本上意味着如果可用内存小于阈值,则会触发警报。

正如您在提交 REST 请求时所注意到的(取决于实际提交的请求以及您的应用程序的结构/设计方式),此特定请求对于应用程序处理来说可能是“繁重的”,因此它可能会使用比您预期的更多的内存。


推荐阅读