out-of-memory - 微米高内存使用率

标签 out-of-memory spring-boot-actuator datadog micrometer spring-micrometer

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

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

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

最佳答案

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

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

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

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

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

另见千分尺文档:https://micrometer.io/docs/concepts#_tag_values

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

关于out-of-memory - 微米高内存使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69217202/

相关文章:

android - 加载位图时出现内存不足错误

Java:查找 OutOfMemoryError 的原因

java - IllegalStateException : org. springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@xxxxxxxx 已关闭

spring-boot - 在多个端口上为 Spring Boot Actuator 端点提供服务

java - 定期报告特定指标

java - 如何使用Java代码获取datadog监视器上收集的指标?

Java 内存不足错误

Clojure : Get "OutOfMemoryError Java heap space" when parsing big log file

erlang - 在 Exometer 中发送 Datadog 标签

Terraform Datadog 查询无效