商城首页欢迎来到中国正版软件门户

您的位置:首页 >Linux如何查看进程占用的物理内存 区分RSS与VSS

Linux如何查看进程占用的物理内存 区分RSS与VSS

  发布于2026-05-04 阅读(0)

扫一扫,手机访问

Linux如何查看进程占用的物理内存 区分RSS与VSS

Linux如何查看进程占用的物理内存 区分RSS与VSS

在Linux系统里排查内存问题时,一个核心动作就是查看进程到底占用了多少物理内存。但这事儿吧,工具不少,概念也多,稍不留神就可能看错数字、误解含义。今天咱们就来理清几个关键工具和概念,特别是如何准确查看RSS,以及它和VSS到底有什么区别。

ps 命令看 RSS 最直接,但要注意单位和默认字段

说到快速查看进程,ps命令绝对是首选。它能迅速拉出一份清单,但关键是要知道,默认的输出里可没有我们最关心的“实际驻留物理内存”这项。你需要明确指定RSS(Resident Set Size)字段:

  • 试试ps aux --sort=-rss:这个组合拳能按RSS从大到小排序,一目了然哪个进程最“吃”内存。记住,这里RSS列的单位是KB,可别当成字节或者MB了。
  • 想要更定制化的信息?用ps -eo pid,ppid,cmd,%mem,rss --sort=-rss。这样你就能同时看到进程ID、父进程、执行命令、内存占用百分比以及具体的RSS值。
  • 这里有个细节:%mem这个百分比,是基于系统总物理内存计算的,但它不考虑交换分区(swap)和内核占用的内存。所以,把所有进程的%mem加起来,很可能还不到100%,这属于正常现象。

top 和 htop 显示 RSS 更直观,但 htop 默认不标单位

如果你喜欢动态刷新的视图,tophtop是更好的选择。在top界面里,直接按Shift + M就能按内存使用排序,默认显示的RES列就是RSS(单位同样是KB)。

htop的界面更友好,色彩也更丰富,但使用时得留个心眼:

  • htopMEM%列显示的就是RSS占总物理内存的比例,很直观。但旁边的RES列默认不显示单位,容易让人困惑。如果不确定,可以按F2进入设置,在“Columns”里确认RES字段已启用,并记住它的值单位是KB。
  • htop主要聚焦于物理内存(RSS),不直接显示虚拟内存大小(VSS),也没法按VSS排序。如果你需要对比VSS,还得回到ps或者/proc文件系统。
  • 另外,某些Linux发行版在编译htop时可能没有启用MEMORY_PERCENTAGE支持,这会导致MEM%一列始终显示为0。遇到这种情况,就只能相信RES列的数值了。

/proc/PID/status 里找 VmRSS 和 VmSize,这是最准的来源

想要最原始、最准确的数据?那就得去/proc文件系统里翻一翻。每个进程在/proc/[PID]/status文件中都暴露了其内存使用的详细底稿,这里的数据未经任何格式化或舍入,直接来自内核统计:

  • 找到VmRSS,它就对应RSS,单位是KB;找到VmSize,它就对应VSS(Virtual Memory Size),单位也是KB。
  • 例如,用命令grep -E 'VmRSS|VmSize' /proc/1234/status(把1234换成目标进程的真实PID)就能快速提取这两个关键指标。
  • 这里清晰地揭示了VSS和RSS的本质区别:VSS衡量的是进程整个虚拟地址空间的“地图面积”,包括代码段、数据段、共享库、已分配但未实际使用的内存(比如malloc后还没写入的区域)、内存映射的文件等等。只要被映射了,就算还没加载进物理内存,也会计入VSS。
  • 而RSS仅仅是VSS中当前真正“驻扎”在物理内存(RAM)里的那一部分。不过要注意,RSS包含了共享内存页(比如多个进程共用的libc库),这就是为什么把所有进程的RSS加起来,总和常常会超过物理内存总量。

别把 RSS 当“进程独占内存”,共享页和缓存会让它失真

这是一个非常常见的误解:看到某个进程RSS是500MB,就以为它独占了500MB物理内存。实际上并非如此:

  • 共享库是“失真”的主要原因。像libc这样的基础库,在物理内存里通常只保存一份,但所有用到它的进程,各自的RSS都会把这部分共享内存算进去。所以,简单地把所有进程RSS相加,得到一个远超物理内存的数字,一点也不奇怪。
  • 文件映射的内存行为也会影响RSS。通过mmap映射的文件,如果是干净页(clean page),被换出到磁盘后,RSS会减少;但如果是脏页(dirty page),即使数据已写回磁盘,只要映射关系还在,RSS可能依然会计入。
  • 正因为RSS包含了这些不一定能立刻回收的部分,所以你不能简单地用“总内存减去所有进程RSS之和”来估算可用内存。命令free -h输出的a vailable字段才更准确地反映了可用内存,因为它综合考虑了page cache、slab缓存、可回收的目录项等内核可释放的资源。
简单总结一下:ps命令最直接查看RSS,单位为KB;/proc/PID/status中VmRSS最准确;RSS反映实际驻留物理内存,但含共享页,总和常超物理内存总量。

说到底,RSS和VSS的差别,不在于哪个数字更大,而在于它们从不同维度描述内存。VSS像是你规划建房的“土地总面积”,而RSS则是当前已经铺好砖、盖好楼的“实际建筑面积”。

所以,当你需要评估当前系统的真实内存压力,想知道物理内存被消耗了多少,应该紧盯RSS。而当你怀疑有内存泄漏——比如程序不断分配内存却迟迟不使用——在物理内存吃紧之前,VSS的异常增长就会成为第一个报警信号。

本文转载于:https://www.php.cn/faq/2418328.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注