smem 是 linux 下精准统计进程物理内存占用的工具,核心指标为 uss(独占内存)、pss(共享内存均摊值)和 rss(驻留内存),其中 uss 可反映杀进程释放量,pss 总和近似系统真实内存占用。

smem 是一个功能强大的 Linux 内存分析工具,能按进程、用户或映射(mapping)维度统计实际物理内存(RSS、PSS、USS)占用,比 ps 或 top 更准确反映内存真实使用情况,尤其适合排查“内存被谁吃掉”这类问题。
理解 smem 的关键内存指标
smem 默认输出中最重要的三列是:
- USS(Unique Set Size):进程独占的物理内存,即该进程关闭后可立即释放的内存。这是衡量“单个进程真实开销”的最干净指标。
- PSS(Proportional Set Size):将共享内存(如 libc、mmap 共享段)按参与进程数均摊后的值。例如一段 4MB 的共享库被 4 个进程使用,每个进程的 PSS 只计入 1MB。PSS 总和 ≈ 系统实际物理内存占用,适合做总量估算和排序对比。
- RSS(Resident Set Size):进程当前驻留在物理内存中的总页数,包含共享部分。容易高估单个进程影响,但仍是常用参考。
常用命令快速定位内存大户
安装后(如 Ubuntu/Debian:sudo apt install smem),可直接运行:
CRM集成版基本功能: 内部邮件,短信息,个人文件柜,日程安排,名片录,网络硬盘,个人网址收藏,个人使用情况统计分析。 新闻管理,公告管理,日程安排查询,工作日志查询,公共网址管理,人事档案管理,组织机构信息查询。 企业文档管理,规章制度,电子刊物。 人力资源管理,档案管理,培训管理,奖惩管理,招聘信息,劳动合同 系统单位信息管理,部门信息管理,用户管理,用户角色设
- 按 PSS 降序列出所有进程:
smem -s pss -r - 只看前 10 名内存占用者:
smem -s pss -r -n 10 - 按用户汇总内存使用(含 PSS 总和):
smem -u - 查看某个进程的内存映射详情(如 pid 1234):
smem -P '^chrome' -m(支持正则匹配进程名)
识别共享内存与异常增长
用 smem -m 查看系统级内存映射,能发现哪些库或文件被大量进程共享。若某段匿名映射([anon])PSS 很高且 USS 接近 RSS,说明它几乎未被共享——可能是某个进程泄漏了私有内存。再结合 smem -p -c "pid comm uss pss rss" 输出,对比 USS 和 PSS 差距大的进程,往往意味着它加载了大量独占数据(如缓存、解压后的资源)。
配合其他工具交叉验证
smem 给出的是快照数据。若怀疑内存持续增长,可配合:
-
watch -n 2 'smem -s pss -r -n 5'动态观察前五名变化 -
cat /proc/<pid>/smaps</pid>查看某进程更细粒度的内存分布(如 AnonHugePages、MMAP 面积) -
journalctl -u <service> --since "1 hour ago"</service>检查服务日志是否伴随 OOM 或重启
不复杂但容易忽略:USS 才是判断“杀掉这个进程能回收多少内存”的可靠依据;PSS 更适合横向比较和容量规划。









