You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何精准计算PostgreSQL等分叉进程的真实与合并内存占用?

PostgreSQL分叉进程内存监控的问题与疑问

我正在开发基于Bash的进程内存监控脚本,针对PostgreSQL这类分叉进程时遇到诸多问题:

  • RSS作为内存指标,但包含其他进程共享的库内容;
  • PSS仅显示进程私有内存,但需从/proc/<pid>/smaps获取,需root权限;
  • USS(Private_Dirty + Private_Clean)同样需访问/proc/<pid>/smaps。

当前尝试的解决方法

目前我尝试遍历各PID的smaps解决问题,示例代码:

for pid in $(pgrep -a -f "postgres" | awk '{print $1}' | tr "\n" " " ); do grep "^Pss:" /proc/$pid/smaps; done

*不确定是否需排除部分PostgreSQL进程。

该方法计算得到的内存占用总和为:

PSS: 4817 MB - USS: 4547 MB - RES: 6176 MB - VIRT: 26851 MB used

但此方法需root权限,且不同工具计算结果存在差异。

工具对比

top和htop无法合并显示PostgreSQL的所有分叉进程,atop可汇总显示且结果看似准确:

NPROCS SYSCPU USRCPU VSIZE RSIZE PSIZE SWAPSZ RDDSK WRDSK RNET SNET MEM CMD 1/1
27 56m50s 16m40s 5.4G 1.1G 0K 2308K 0K 0K 0 0 11% postgres

核心疑问

  1. 如何精准获取PostgreSQL等分叉进程的内存占用?
  2. 若atop计算准确,其RSIZE值如何无需root权限获取?

补充说明

编辑:发现脚本pgrep模式存在bug,误解析非PostgreSQL进程,修正后脚本计算的RES值与atop的RSIZE一致,但核心疑问仍存:汇总RSS(RES)是否为最准确的内存统计方式?


内容的提问来源于stack exchange,提问作者Claudio Kuenzler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 10:50:14