首页/系统/Linux 内核与性能调优速查/ps 内存列含义:VSZ 与 RSS
内存与 OOM58 条

ps 内存列含义:VSZ 与 RSS

VSZ 是虚拟地址空间大小(可能大部分未使用),RSS 是常驻物理页(包含共享页);多进程相加大于物理内存属于共享重复计数。

什么是 VSZ 与 RSS

ps 输出里有两个常被误用的内存列:VSZ 是进程虚拟地址空间大小,包含了大量已经预留但从未真正使用的地址(典型如 JVM 的预留空间),它偏大通常不代表占用高;RSS 是当前驻留在物理内存中的页数,包含与其他进程共享的库与共享内存,因此把多个进程的 RSS 相加会大于实际物理占用。要评估“这个进程真实吃了多少内存”,需要用 PSS 口径。

基本信息

列名vsz(虚拟)/ rss(常驻)/ pmem(占物理内存百分比)
排序ps --sort=-rss 按 RSS 从大到小
口径差异共享库与共享内存被重复统计
更准口径PSS(smaps_rollup 或 smem)按共享比例分摊
配套工具pidstat -r 观察内存随时间变化
注意RSS 单位在 ps 中通常为 KiB

典型使用场景

  • 找出内存占用最高的进程:按 RSS 排序的日常入口
  • 解释“RSS 之和超过物理内存”:共享内存的重复计数
  • 评估真实占用:用 PSS 替代 RSS 做总量核算
  • 观察内存增长趋势:pidstat 间隔采样而非单次快照
  • 容器内核对:与 cgroup 的 memory.current 交叉验证

常用命令

常用命令
ps -eo pid,vsz,rss,pmem,comm --sort=-rss | head    # 按 RSS 排序
ps -eo pid,rss,comm | awk '{s+=$2} END {print s" KiB"}'   # 求和(含重复计数)
pidstat -r -p 12345 1 5                  # 内存随时间变化
cat /proc/12345/smaps_rollup | grep -i -E 'Rss|Pss'   # PSS 口径
cat /proc/12345/status | grep -i -E 'VmRSS|VmHWM'     # 峰值 RSS
cat /proc/12345/statm                    # 页数视角的快速查看

内存口径对照

口径统计范围适用
VSZ虚拟地址空间判断预留规模,不代表占用
RSS常驻物理页(含共享)快速排序找大户
PSS共享页按比例分摊评估真实物理占用
USS独占部分判断进程自身增量
VmHWM历史峰值 RSS排查瞬时高峰
把 RSS 相加去做容量规划会系统性高估:同一份共享库被几十个进程引用时会被重复计算,用 PSS 汇总更接近真实值。
容器内 ps 显示的是宿主命名空间下的视图(取决于运行时配置),与 cgroup 限制不是同一口径,判断容器是否接近限制要用 cgroup 文件。
排查内存增长时把历史峰值(VmHWM)与当前 RSS 一起看:峰值明显高于当前值说明曾出现瞬时高峰,间隔较长的常规采样很容易漏掉这类现象。

易错点

  • VSZ 大不表示占用大(如 JVM 预留虚拟地址),把两个口径混用会得出荒谬结论
  • 评估真实占用用 PSS(smaps_rollup 或 smem),共享成分多的服务差异明显
  • 用单次快照判断内存增长,忽略波动与峰值,容易漏掉真正的爬升趋势
  • 把容器内的进程 RSS 直接与容器内存限制比较,忽略了统计口径与命名空间差异

数据来源与参考

  • procps-ng 文档 ps(1)
  • sysstat 文档 pidstat(1)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌