out-of-memory - 微米高内存使用率
问题描述
我们看到我们的一些服务(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
你有高基数标签吗?如果是这样,您可以规范化或删除它们。
推荐阅读
- angular - 如何在 Angular 中将 ngFor 与 Observable 一起使用?
- angular - Angular 组件输入静态类型
- android - 我想创建一个在后台连续运行并接收火灾基地通知的服务
- python - Pandas 列到 numpy 数组
- php - Symfony 4 Remember Me 不起作用,浏览器重启时 cookie 被破坏
- javascript - Javascript 在滚动动画中不起作用
- batch-file - 批处理命令将一些信息添加到文件夹中的多个文件中
- c++ - 带有自身迭代器的 STL 容器:set vs unordered_set
- reactjs - 用另一个 Promise 包装一个返回 Promise 的函数?
- python - Selenium 异常:“组件未初始化”