首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >弹簧引导2执行器jvm.gc.memory.allocated度规

弹簧引导2执行器jvm.gc.memory.allocated度规
EN

Stack Overflow用户
提问于 2020-09-14 07:58:55
回答 1查看 2.1K关注 0票数 3

我使用spring 2.2.5,并通过spring启动执行器和Grafana监视我的应用程序指标。

我的应用程序打包了Docker(OpenJdk11),并配置了4GB内存。

我有长时间的gc暂停,大约有1-2秒,并且它与高jvm.gc.memory.allocated相关。

jvm.gc.memory.allocated指标有时达到30 to

有人能解释一下jvm.gc.memory.allocated指标吗?这是什么意思?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-16 17:35:53

这是一个相当奇怪的指标,如果你问我(在意义上说,它不是微不足道的掌握)。我们慢慢来。

首先,它是由micrometer 这里生成的,如果您阅读它的描述:

一个GC之后的年轻一代内存池的大小增加到下一个GC之前。

对你来说也没什么意义。我必须看一下计算它的代码,才能理解它的作用。

如果您了解一些关于GC和看看这段代码工作方式的基本知识,那么实际上事情相当简单。

分代垃圾收集器(如G1)将堆划分为区域(youngold)。新对象的分配发生在年轻的区域(除非humongous,但我不会进入它),特别是在Eden space中。一旦触发GC,Eden就会被清除,分配也会再次发生。这是相当简化和不完全正确的( major/mixed集合的情况略有不同)。

既然这一理论已经到位,您就可以从以下几个方面了解isYoungGenPool是什么:

代码语言:javascript
运行
复制
if (youngGenPoolName != null) {
      final long youngBefore = before.get(youngGenPoolName).getUsed();
      final long youngAfter = after.get(youngGenPoolName).getUsed();
      final long delta = youngBefore - youngGenSizeAfter.get();
      youngGenSizeAfter.set(youngAfter);
      if (delta > 0L) {
           allocatedBytes.increment(delta);
      }
}

具体来说,它被定义为这里

..。endsWith(“伊甸园空间”)

因此,这段代码获取了Used SpaceEden Space中GC循环前后的快照,计算delta并将所有这些增量添加到单个值中。这就是jvm.gc.memory.allocated

这种类型衡量应用程序在其生存期内分配了多少,但只通过年轻空间分配。国际水文学组织,你应该仔细看,因为:

  • 它不跟踪大量的分配(这有一个不同的指标)
  • 它只适用于世代垃圾收集器(例如,Shenandoah不是这样的收集器)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63880261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档