由外到内层层收窄 —— 从「申请了多少虚拟地址」到「杀掉进程能立刻释放多少物理内存」。越往里,越接近真实、越私有。
包含关系一览 #
外层完全包住内层:VSS ≥ RSS ≥ PSS ≥ USS。四个盒子测的是同一块内存的不同「口径」。
VSSVirtual Set Size · 虚拟耗用内存最虚 · 最不可信
进程申请的全部虚拟地址空间:含未映射物理页的区域、已换出(Swap)的页、共享库的完整大小。数字大,但不代表真实占用。
RSSResident Set Size · 常驻物理内存会重复计算
真正装进物理内存的部分 = 独占物理内存 + 共享库的完整物理内存。多个进程共享同一个库时,每个进程都完整计一遍。
PSSProportional Set Size · 比例物理内存最能反映真实贡献
独占物理内存 + 按共享进程数平摊的共享物理内存。所有进程的 PSS 相加 ≈ 系统实际用量,最适合评估单进程的真实贡献。
USSUnique Set Size · 独占物理内存杀掉即释放
仅进程自身私有、不与任何人共享的物理内存。杀掉该进程,系统能立即回收的量就是它。
数字更大 / 更虚更真实 / 更私有
四个指标怎么选 #
同样一块内存,看你想回答哪个问题。
| 指标 | 包含什么 | 回答的问题 | 致命局限 |
|---|---|---|---|
| VSS | 已申请的虚拟内存全部(含未分配、已 Swap、共享库全量) | 进程「画了多大的饼」 | 与真实物理消耗几乎无关,参考价值低 |
| RSS | 独占物理内存 + 共享库完整物理内存 | 进程占了多少物理内存 | 重复计算:各进程 RSS 相加会远超物理内存总量 |
| PSS | 独占物理内存 + 共享部分按进程数平摊 | 进程对系统的真实物理贡献 | 需要按共享关系计算,采集成本略高 |
| USS | 仅私有、不共享的物理内存 | 杀掉进程能立即释放多少 | 忽略共享成本,不代表进程完整「体量」 |
一个例子,四个数就分开了 #
进程 A:私有 20 MB,并与另外 2 个进程共用一个 12 MB 的库(共 3 个进程共享),此外还申请了但尚未真正使用物理页的虚拟空间。
进程 A 的内存构成
私有物理内存:20 MB(只属于 A)
共享库物理内存:12 MB(A、B、C 三家共用)
已申请未映射 / 已 Swap 的虚拟空间
关键算式
USS = 20私有部分PSS = 20 + 12 ÷ 3 = 24平摊共享RSS = 20 + 12 = 32完整计共享VSS = 32 + 虚拟空间 > 32USS
20MB
独占
PSS
24MB
平摊 12÷3
RSS
32MB
全量共享
VSS
>32MB
含虚拟
为什么 PSS 最公道 #
那 12 MB 的库只在物理内存里存了一份。把三个进程的账单加起来对比就很清楚:
| 口径 | 进程 A | 进程 B | 进程 C | 合计 | 与真实占用(12 MB)的偏差 |
|---|---|---|---|---|---|
| RSS 记法 | 12 MB | 12 MB | 12 MB | 36 MB | 凭空多算 24 MB |
| PSS 记法 | 4 MB | 4 MB | 4 MB | 12 MB | 完全吻合 |
Tip
RSS 让 A、B、C 每家都记 12 MB,三家相加 = 36 MB,凭空多算出 24 MB;PSS 让每家只记 4 MB,三家相加正好 = 12 MB,与真实占用吻合。
怎么记 #
USS ≤ PSS ≤ RSS ≤ VSS。
- 排查内存泄漏:看 USS / PSS 的增长趋势。
- 评估系统总压力:把各进程的 PSS 相加。