为什么 Prometheus 消耗这么多内存?

Tho*_*son 14 memory prometheus

我正在使用 Prometheus 2.9.2 来监控大型节点环境。作为在我们的环境中测试 Prometheus 最大规模的一部分,我在我们的测试环境上模拟了大量指标。

我的管理服务器有 16GB 内存和 100GB 磁盘空间。

在规模测试期间,我注意到 Prometheus 进程消耗越来越多的内存,直到进程崩溃。

我注意到 WAL 目录很快就被大量数据文件填满,而 Prometheus 的内存使用量却在上升。

管理服务器每15秒抓取一次节点,存储参数全部设置为默认值。

我想知道为什么会发生这种情况,以及如何/是否可以防止进程崩溃。

谢谢你!

Sut*_*Das 5

内存不足崩溃通常是由于查询过于繁重而导致的。这可以在您的规则之一中设置。(该规则甚至可能在 grafana 页面上运行,而不是在 prometheus 本身上运行)

如果您有大量指标,则规则可能会查询所有指标。一种快速解决方法是通过特定标签(而不是正则表达式)精确指定要查询的指标。

  • 此外,Prometheus 有一堆 [`pprof`](https://golang.org/pkg/net/http/pprof/) 请求处理程序,它们公开 CPU 使用情况、内存使用情况、启动后总内存分配等的分析信息.您可以在“http://your.prometheus.host:9090/debug/pprof”获得概述。因此,如果您安装了“go”,则只需使用“go pprof http://your.prometheus.host:9090/debug/pprof/heap”,然后输入“web”并按 Enter 键进入出现的命令行提示符。另外,您可以从 https://github.com/google/pprof 获取“pprof”(或通过安装 Golang)。 (8认同)

val*_*ala 5

本文解释了 Prometheus 在数据摄取期间可能使用大量内存的原因。如果您需要减少 Prometheus 的内存使用量,那么以下操作会有所帮助:

  • 增加Prometheusscrape_interval配置。
  • 减少抓取目标和/或每个目标抓取指标的数量。

PS 还可以看看我从事的项目 - VictoriaMetrics。与 Prometheus 相比,它可以使用更少的内存。有关详细信息,请参阅此基准测试

  • 请明确哪些链接指向您自己的博客和项目。 (3认同)