要按进程统计独占内存消耗,应使用 smem 工具关注 USS(Unique Set Size),它表示进程真正独占的物理内存大小;常用命令如 smem -s uss -r --no-header | head -20 按 USS 降序列出前 20 个进程,配合 -p 可显示百分比,-P 可筛选特定进程。

要按进程统计独占内存消耗,关键在于关注 USS(Unique Set Size) —— 它代表一个进程真正独占、不与其他进程共享的物理内存大小,是衡量“纯私有开销”的最干净指标。
Smem 默认输出就包含 USS 列,但需注意:默认不排序、不加表头、不显示单位百分比,直接运行 smem 可能信息杂乱。实际使用中建议组合常用选项,让结果清晰可用。
查看每个进程的独占内存(USS),按大小降序排列
smem -s uss -r --no-header | head -20
-
-s uss:按 USS 数值升序排序(加-r即反转为降序,最大 USS 在前) -
--no-header:去掉表头,方便配合head或脚本处理(如需表头可删掉该选项) -
head -20:只看前 20 个独占内存最多的进程
输出示例(截取):
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
12345 user /usr/bin/firefox 0 184524 221088 312576 67890 user /usr/lib/code/code 0 162308 198744 284120
第三列是 USS(单位 KB),数值越大,该进程“吃掉”的独占内存越多。
按 USS 百分比查看,更直观判断占比
smem -s uss -r -p | head -15
-
-p:所有内存数值以占系统总物理内存的百分比显示(USS%、PSS%、RSS% 等) - 一眼看出哪个进程的独占内存占了整机 RAM 的百分之几,比如
USS%列显示1.24%,表示它独占了约 1.24% 的物理内存。
筛选特定进程的 USS 情况(例如排查 java 进程)
smem -P 'java' -s uss -r -p
-
-P 'java':用正则匹配命令名含 “java” 的进程(大小写敏感,如需忽略加-i) - 输出仅包含匹配到的 Java 类进程,并按 USS 从高到低排列,附带百分比
补充说明
- USS 值恒 ≤ PSS ≤ RSS,三者关系体现共享程度:USS 是“完全私有”,PSS 是“按比例摊销后的共享”,RSS 是“全部驻留物理页(含重复计算的共享部分)”。
- 若某进程 USS 接近 RSS,说明它几乎不共享内存(如静态链接的独立程序);若 USS 远小于 RSS,则高度依赖共享库(如浏览器、桌面应用)。
- USS 无法直接通过
/proc/<pid>/statm获取,smem 是少数能准确提取并汇总 USS 的工具之一,因为它解析了/proc/<pid>/smaps中的MMUPageSize和MMUPageSize之外的Rss与Pss字段,并反推唯一页集合。
不复杂但容易忽略

















