java - 在此时间窗口中检测到内存耗尽的早期症状
问题描述
我正在努力理解新遗物引发的以下错误/警告:
在此时间窗口中检测到内存耗尽的早期症状。
以下是基于日志的配置文件图表。
我想了解:
- 为什么发生 Minor GC 时 Eden Space 永远不会完全清理?
- 根据日志中的 GC 行为,蓝色和黄色是否分别对应于主要 GC 和次要 GC?
- 为什么GC一直在收集?
- 红色区域是 New Relic 发出内存耗尽警报时。但是,堆还没有满。这会触发断路器转换到打开状态吗?
在向我们的任务执行器服务(例如:)提交新的 REST 调用时,我注意到了这种行为executorService.submit(() -> restconecto.post(..))
。我尝试提交一个logger.info()
并且它工作正常,但似乎进行长时间的投票是问题所在。以下是我的 GC 配置:
- 并行GC
-Xms2048m -Xmx2048m
感谢您的任何见解。
解决方案
垃圾收集器是一个守护线程,在 JVM 启动时启动,当所有非守护线程停止时守护进程停止。GC 一直在运行,而应用程序永远不会清理的原因很可能是因为总有一些东西要收集(甚至可能是后台任务)。最终用户无法控制垃圾收集器。
真的不明白你的问题
见 1。
您的堆不必已满即可触发警报。默认情况下,遗物设置如下:
Memory threshold: 20% Garbage collection CPU threshold: 10%
当然可以调整这些,但这些基本上意味着如果可用内存小于阈值,则会触发警报。
正如您在提交 REST 请求时所注意到的(取决于实际提交的请求以及您的应用程序的结构/设计方式),此特定请求对于应用程序处理来说可能是“繁重的”,因此它可能会使用比您预期的更多的内存。
推荐阅读
- spring - 为什么 Spring Batch 计划作业只运行一次,尽管调度程序运行并且作业侦听器每次运行都说 FINISHED
- google-cloud-storage - 谷歌云承载令牌到期
- javascript - 简单的 If else on count - 显示不同的 h5
- node.js - 使用 nvm 安装节点后无法识别节点和 npm
- python - 如何将 QGraphicView 翻译到我双击的位置?
- zabbix - 使用 Zabbix 代理活动模式检查 HTTP 状态
- powershell - 如何仅使用 powershell 从特定文件夹中移动文件
- javascript - 获取框架 7 v2 中没有密钥的 JSON 数据
- pybind11 - 使用 pybind11 创建一个 numpy python 字符串数组
- python - 如何以编程方式将基于“自定义类”的单例对象转换为 python 模块?