首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何监控Postgres内存使用情况?

如何监控Postgres内存使用情况?
EN

Stack Overflow用户
提问于 2021-04-28 23:28:48
回答 1查看 404关注 0票数 1

我们在Kubernetes中运行Postgres。我们的Prometheus pod监控总是显示Postgres以共享或缓存状态填充整个pod内存。

代码语言:javascript
运行
复制
free -h
              total        used        free      shared  buff/cache   available
Mem:            62G        1.7G         13G         11G         47G         48G


ps -u postgres o pid= | sed 's#.*#/proc/&/smaps#' | sed 's/ //g#/proc/&/smaps#' | \
    xargs grep -s ^Pss: | awk '{A+=$2} END{print "PSS: " A}' 
PSS: 13220013 kb

ps -u postgres o pid,rss:8,cmd | awk 'NR>1 {A+=$2} {print} END{print "RSS: " A}' | tail -1
RSS: 38794236 kb

如果我错了,请纠正我,但由于topps(RSS/RES)中显示的内存是共享内存,这意味着Posgres没有使用该内存,它只在需要时保留,其他进程也可以使用该内存。一些articles说人们需要cat /proc/<PID>/smaps并检查PSS以找到Postgres的实际内存使用情况。

我们最近收到了OOM错误,但我们无法在我们的监控中发现它。因为我们的pod内存监控总是显示90%的使用率,因为它只监控RSS/RES内存,这也包括共享/缓存内存。因此,当OOM错误发生并且我们的数据库崩溃时,我们没有看到RAM的任何增加。该错误是由我们引入到后端的一个新查询引起的,该查询在每个查询中使用大量内存。

我们已经安装了prometheus- Postgres -exporter,为我们提供了良好的Postgres指标,但这并没有显示我们有使用大量内存的查询,但可能我们的Grafana图缺少该图?

因为我们在Kubernetes中运行Postgres,所以导出PSS内存很麻烦。所以我觉得我好像错过了什么。

那么如何监控Postgres的内存使用情况呢?如何处理使用过多内存的查询或由于加载而使用过多内存的postgres?

EN

回答 1

Stack Overflow用户

发布于 2021-04-28 23:51:46

我建议您通过在/etc/sysctl.conf中设置vm.overcommit_memory = 2并运行sysctl -p来禁用内存过量使用。不要忘记根据内存和交换空间适当地设置vm.overcommit_ratio

就不会让OOM杀手出局了。

然后,您可以检查/proc/meminfo,以确定是否内存紧张:

  • CommitLimit显示内核愿意分配给

的内存量

  • Committed_AS显示进程

分配了多少内存

有关详细信息,请查看kernel documentation

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67303203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档