文章 573
评论 5
浏览 224989
Prometheus 指标采集性能损耗:每秒万次采集拖慢应用?采样率调整+Pushgateway 缓冲!

Prometheus 指标采集性能损耗:每秒万次采集拖慢应用?采样率调整+Pushgateway 缓冲!

公司在做压测的时候发现一个奇怪的现象:QPS 跑到 8000 的时候,接口响应时间有个规律性的毛刺——每隔 15 秒,P99 延迟就会跳一下,从 50ms 飙到 200ms,持续一两秒又恢复正常。查了半天,根因是 Prometheus 来拉指标了。JVM 要遍历所有指标、序列化成文本、再通过网络发出去,这一整套操作每次都要几十毫秒。平时感觉不到,高并发下就成了定时炸弹。 Prometheus 好用,但它的 Pull 模式有个固有的问题:每次抓取,应用程序都要做一遍"遍历指标 → 格式化 → 输出"的全流程。 指标越多、频率越高,这个开销越不可忽略。 为什么 Pull 模式在高频采集下会出问题 Prometheus 默认每 15 秒拉一次指标。对于大多数服务来说,这个频率没啥问题——15 秒一次,每次几十毫秒,感知不到。 但如果你把采集频率调成了 5 秒、甚至 1 秒,或者你的应用里有大量自定义指标(几百个 Counter/Histogram),情况就不一样了。 每次采集,JVM 里发生的事情是: Prometheus 发 GET /metrics 请求 │ ├─ 遍历所有注册的指标(....

服务端开发博客:后端架构、高并发、性能优化与微服务实战教程