You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Linux进程RSS内存是否含缓存?如何获取进程实际占用内存?

Linux进程RSS与缓存内存的疑问解答

1. RSS内存是否包含缓存内存?

答案是肯定的。RSS(Resident Set Size)指的是进程当前实际驻留在物理内存中的字节数,它的组成里不仅有进程自身的私有代码、数据、栈内存,还包含了进程读取文件时被内核缓存到物理内存中的页——比如你进程读取了一个配置文件,内核会把这个文件的内容缓存起来,只要这些缓存页还没被内核回收,就会被算进该进程的RSS值里。

简单说:只要是进程关联的、当前在物理内存中的缓存页,都会被RSS统计进去。

2. 如何获取排除缓存后的进程实际内存?

想要排除共享缓存后的内存,得看你需要的是「完全独占的内存」还是「按比例分摊的共享内存」,这里给你几个实用的方法:

方法一:通过/proc/[pid]/smaps手动计算

每个进程的/proc/[pid]/smaps文件会详细拆分内存段的类型,我们可以提取私有内存部分,这部分就是排除了共享缓存的内存:

# 替换[pid]为你要查看的进程ID
grep -E 'Private_Dirty|Private_Clean' /proc/[pid]/smaps | awk '{sum += $2} END {print sum " KB"}'
  • Private_Dirty:进程修改过的私有内存页
  • Private_Clean:进程未修改过的私有内存页
    两者相加就是进程完全独占的内存,不包含任何共享的文件缓存或库缓存。

方法二:用ps直接查看USS/PSS指标

如果你的ps版本支持(大部分现代Linux发行版都支持),可以直接输出更精准的内存指标:

ps -o pid,comm,pss,uss -p [pid]
  • USS(Unique Set Size):进程完全独占的内存,完全不包含任何共享部分(包括共享缓存),这是最接近你要的「排除缓存后的实际内存」的指标。
  • PSS(Proportional Set Size):把共享内存按共享进程的数量均分后的值(比如一个内存页被3个进程共享,每个进程算1/3的大小),这个指标更适合评估进程对系统整体内存的实际消耗。

方法三:用tophtop可视化查看

  • top:进入top后按f键,在字段列表里找到PSSUSS(不同版本可能命名略有差异),勾选后按q返回,就能在界面里看到这些指标了。
  • htop:默认可能已经显示PSS,或者进入设置(按F2),在「Columns」里添加USSPSS字段,界面会更直观。

最后补充一句:其实没有绝对的「排除缓存后的完美内存值」,因为文件缓存是内核提升性能的机制,当系统内存不足时会自动回收。如果要评估进程必须保留的最小内存,USS是最佳选择;如果要评估进程对系统内存的实际压力,PSS会更准确。

内容的提问来源于stack exchange,提问作者Rafiq Shaikh

火山引擎 最新活动