微米高内存使用率

Posted

技术标签:

【中文标题】微米高内存使用率【英文标题】:Micro meter high memory usage 【发布时间】:2021-11-11 23:08:58 【问题描述】:

我们看到我们的一些服务(Java SpringBoot)出现 OOM。在检查堆转储时,我们发现 micrometer 库占用了 113MB(大约占总堆内存的 54%)。

io.micrometer.statsd.internal.LogbackMetricsSuppressingUnicastProcessor
Jar: io.micrometer:micrometer-core

我在网上做了一些研究,发现创建很多不同的标签会导致这个问题。但是,我们的服务并非如此。我们正在向数据狗推送大量指标,但一直在重复使用标签。

【问题讨论】:

您能否详细说明 OOM 发生需要多长时间?另外,您要发送多少指标?带有 2 个不同标签的 1 米大约需要 2 米。 (在内部它们是一样的) 【参考方案1】:

这样的内存问题通常是由使用高基数标签引起的。

这里的高基数意味着标签可以有大量的唯一值。例如,如果您想将用户的gender 附加到您的指标,则该标签可能具有较低的基数,因为您可能没有很多值可供选择。另一方面,userID 是高基数,因为每个用户都会有一个唯一的用户。

拥有高基数标签可能会产生大量计量表,因为每个唯一值都有计量表,这将导致高内存消耗,并且您的指标后端也会遇到类似问题。

(可能)高基数标签的示例:

资源ID,例如:userID 电子邮件地址(基本上是任何用户输入) 请求路径而不是模板(例如:它可以包含resourceID)

另请参阅 Micrometer 文档:https://micrometer.io/docs/concepts#_tag_values

你有高基数标签吗?如果是这样,您可以规范化或删除它们。

【讨论】:

以上是关于微米高内存使用率的主要内容,如果未能解决你的问题,请参考以下文章

Win7电脑物理内存占用过高怎么办?

linux中内存占用率过高,如图

内存使用率高 - 应用程序响应慢:已用内存值未减少 + 可用内存值未增加

win10进程System内存占用过高怎么解决

linux内存占用率过高怎么办

.NetCore 应用程序内存泄漏 - 高开销|未使用的内存