首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何统计每个PG进程的真实内存消耗?

如何统计每个PG进程的真实内存消耗?

作者头像
用户4035096
发布2026-07-09 18:47:09
发布2026-07-09 18:47:09
90
举报

如何统计每个PG进程的真实内存消耗?

PG是进程模型的数据库, 如何统计每个进程的内存开销? 例如你想进行精确的内存控制?

可以看看这个插件

https://github.com/bonesmoses/pg_meminfo

pg_meminfo插件可以统计PostgreSQL每个进程的内存消耗, 数据来源为Linux操作系统对每个PID的smaps的统计信息, 所以目前这个插件仅支持Linux下的PostgreSQL, 如果是其他操作系统恐怕要先阅读一下相关的系统文档, 看看有没有类似的统计信息可获取.

pg_meminfo 介绍

该开源项目 pg_meminfo 是一个 Postgres 扩展,专门用于解决“如何获取每个 Postgres 后端进程(backend)当前实际占用的物理内存”这一问题。传统上,这类需求只能通过诸如 cat /proc/4242/smaps | grep Pss | awk '{total += $2} END {print total}' 这样的命令行组合来实现,使用起来既繁琐又不便于与数据库数据联动。pg_meminfo 让你可以直接在 SQL 层面获取同样的信息,大大提升了易用性和集成性。

它的核心方法是:遍历当前 Postgres 实例下的每个后端进程,解析其 /proc/[pid]/smaps 文件,提取和聚合各内存区段的详细指标(如 PSS, RSS, Swap 等),并将这些数据通过扩展函数暴露为 SQL 视图和函数。底层解析和聚合逻辑使用了 C 语言实现,并充分利用 Postgres 的扩展 API 以及高效的内存分配机制。

主要特性与用法如下:

  1. 安装与初始化
代码语言:javascript
复制
git clone git@github.com:bonesmoses/pg_meminfo.git  
cd pg_meminfo  
make  
sudo make install  

然后在数据库中执行:

代码语言:javascript
复制
CREATE EXTENSION pg_meminfo;  
  1. 核心能力
  • 提供 get_all_smaps() 函数:返回每个后台进程每个内存区域的详细指标(仅超级用户或 pg_read_all_stats 角色可用)。
  • 提供 smap_summary 视图:以 PID 为单位,聚合各内存区域的指标,更适合诊断和监控。
  1. 使用举例 假设你想查询 pid 为 4242 的 Postgres 后端进程的 PSS 内存占用,直接在 SQL 层操作:
代码语言:javascript
复制
SELECT pss FROM smap_summary WHERE pid = 4242;  

这样,你无需再通过操作系统命令行、awk、grep 等工具链,就能高效获得数据库各后台进程的物理内存使用详情,非常适合数据库运维人员进行性能诊断与资源监控。

总结:pg_meminfo 极大简化了 Postgres 各进程内存占用的获取与分析流程,并为进一步的自动化诊断与监控提供了便利的数据接口。


注意,pg_meminfo 扩展仅适用于 Linux 操作系统。

原因如下:

  • 该扩展通过读取 /proc/[pid]/smaps 文件来获取内存信息,而 /proc 文件系统和 smaps 文件是 Linux 系统特有的功能。
  • 在源码和文档中明确说明:“This function ONLY works on Linux systems!”(详见 meminfo.h 和 README.md)。
  • 如果在非 Linux 系统上使用,会直接报错,拒绝运行。

也就是说,pg_meminfo 不能在 Windows、macOS 或其他类 Unix 系统(如 FreeBSD)上使用,只能在 Linux 上部署和使用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 digoal德哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何统计每个PG进程的真实内存消耗?
  • pg_meminfo 介绍
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档