Pod内存使用率一直升高,请问有什么办法可以优化内存占用吗?

Pod内存使用率一直升高,我们怎样知道大概多久之后会到达Limit值,并在一定时刻触发告警,在Pod被杀掉之前进行排查?如果数据指标数量大导致Promethues占用内存很高,出现Prometheus容器OOM,请问有什么办法可以优化内存占用吗?...显示全部

Pod内存使用率一直升高,我们怎样知道大概多久之后会到达Limit值,并在一定时刻触发告警,在Pod被杀掉之前进行排查?如果数据指标数量大导致Promethues占用内存很高,出现Prometheus容器OOM,请问有什么办法可以优化内存占用吗?

收起
参与7

查看其它 1 个回答晓风的回答

晓风晓风其它用友网络

1、Promtheus提供了基础的预测能力,基于当前的变化速度,推测一段时间后的值。Prometheus的Deriv和Predict_Linear函数可以满足这种需求。
predict_linear函数:对曲线变化速率进行计算,起到一定的预测作用。比如当前这1个小时的内存可用率急剧下降,这种情况可能导致内存已满,这时可以使用该函数,用当前1小时的数据去预测未来几个小时的状态,实现提前告警。

以mem_free为例,mem_free仅为举例,实际内存可用以mem_available为准。

执行查询:mem_free{instanceIP="xxx.xxxx.xxx.xxx"}/1024/1024

结果显示最近一小时的free值一直在下降。

deriv函数可以显示指标在一段时间的变化速度:

deriv(mem_free{instanceIP="xxx.xxxx.xxx.xxx"}[1h])

predict_linear函数是预测基于这种速度,最后可以达到的值:

predict_linear(mem_free{instanceIP="xxx.xxxx.xxx.xxx"}[1h], 2*3600)/1024/1024

你可以基于设置合理的告警规则,如小于10时触发告警:

rule: predict_linear(mem_free{instanceIP="xxx.xxxx.xxx.xxx"}[1h], 2*3600)/1024/1024 <10

predict_linear与deriv的关系: 含义上约等于如下表达式,不过predict_linear稍微准确一些。

 deriv(mem_free{instanceIP="xxx.xxxx.xxx.xxx"}[1h]) * 2 * 3600
+
  mem_free{instanceIP="xxx.xxxx.xxx.xxx"}[1h]

2、如果采集任务的数据指标数量非常巨大,就要考虑Prometheus的hash分区采集,分摊压力。还可以考虑省去一些在生产过程中没必要的指标。

互联网服务 · 2020-06-16
浏览3926

回答者

晓风
其它用友网络
擅长领域: 云计算容器容器云

晓风 最近回答过的问题

回答状态

  • 发布时间:2020-06-16
  • 关注会员:3 人
  • 回答浏览:3926
  • X社区推广