Linux中RSS是Resident Set Size的缩写,指的是进程当前驻留在物理内存中的部分大小,也就是进程实际使用的物理内存量,不包含被换出到交换分区或者映射到磁盘文件的内存部分。

RSS的核心含义
RSS统计的是进程实际占用的物理内存,这部分内存是进程正在使用、没有被操作系统换出到磁盘交换空间的。需要注意的是,如果多个进程共享同一个动态链接库或者共享内存段,这部分共享内存会被计入每个相关进程的RSS中,因此所有进程的RSS之和往往会大于系统实际的物理内存使用总量。
RSS和其他内存指标的区别
Linux中常见的内存指标还有VSZ、PSS、USS,它们的差异如下:
| 指标名称 | 含义说明 |
|---|---|
| RSS | 进程驻留物理内存大小,包含共享内存部分 |
| VSZ | 进程占用的虚拟内存大小,包含未分配物理内存的虚拟地址空间 |
| PSS | 按比例分摊共享内存后的进程内存大小,共享部分按进程数均分 |
| USS | 进程独占的物理内存大小,不包含任何共享部分 |
查看进程RSS的常用方法
使用ps命令查看
ps命令可以查看指定进程或者所有进程的RSS信息,默认单位是KB。
# 查看所有进程的PID、命令、RSS、VSZ信息 ps aux | head -10 # 查看指定PID为1234的进程的RSS ps -o rss= -p 1234
使用top命令查看
top命令可以实时查看进程的内存占用情况,其中RES列对应的就是进程的RSS值,单位默认是KB,也可以通过快捷键切换显示单位。
# 运行top命令,按f键可以自定义显示列,确保RES列被选中 top
通过/proc文件系统查看
Linux的/proc目录下每个进程都有对应的PID目录,其中的status文件包含了进程的内存信息,VmRSS字段就是RSS值。
# 查看PID为1234的进程的RSS信息 cat /proc/1234/status | grep VmRSS
RSS使用注意事项
- 不要直接把所有进程的RSS相加来计算系统总内存使用,因为共享内存会被重复计算。
- RSS只能反映进程当前驻留物理内存的大小,不能体现进程虚拟内存的整体占用情况。
- 如果需要准确评估进程对物理内存的实际占用,建议结合PSS和USS指标一起分析。
代码示例:读取进程RSS信息
下面是一个简单的Python脚本,用于读取指定进程的RSS值并转换为MB单位显示:
import os
import sys
def get_process_rss(pid):
# 拼接/proc/PID/status文件路径
status_path = f"/proc/{pid}/status"
if not os.path.exists(status_path):
return None
with open(status_path, "r", encoding="utf-8") as f:
for line in f:
# 查找VmRSS行
if line.startswith("VmRSS:"):
# 提取数值部分,默认单位是kB
rss_kb = int(line.split()[1])
# 转换为MB
rss_mb = rss_kb / 1024
return rss_mb
return None
if __name__ == "__main__":
if len(sys.argv) != 2:
print("使用方法: python get_rss.py 进程PID")
sys.exit(1)
pid = sys.argv[1]
rss = get_process_rss(pid)
if rss is not None:
print(f"进程{pid}的RSS大小为: {rss:.2f} MB")
else:
print(f"未找到PID为{pid}的进程")