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

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

参与7

2同行回答

晓风晓风其它用友网络
1、Promtheus提供了基础的预测能力,基于当前的变化速度,推测一段时间后的值。Prometheus的Deriv和Predict_Linear函数可以满足这种需求。predict_linear函数:对曲线变化速率进行计算,起到一定的预测作用。比如当前这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
浏览3867
mtming333mtming333课题专家组系统架构师某电子支付
这个要结合JMX exporter Prometheus让架构师看看显示全部

这个要结合JMX exporter Prometheus让架构师看看

收起
互联网服务 · 2020-06-16
浏览2220

提问者

Dongxin
系统架构师某银行股份有限公司
擅长领域: 服务器灾备存储

问题来自

相关问题

相关资料

相关文章

问题状态

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