Linux如何查看进程占用的物理内存?ps和pmap命令详解【工具】

梦萱同学_7813

梦萱同学_7813

2026-04-16

610人浏览

原创

真实物理内存占用应看 rss(resident set size),单位 kb,反映当前驻留 ram 的物理页大小;pss 更准确体现进程独占与分摊的内存,避免共享库重复计算。

linux如何查看进程占用的物理内存?ps和pmap命令详解【工具】

ps 命令怎么看真实物理内存占用?

ps 默认显示的 %MEM 和 VSZ 容易误导——前者是占总内存百分比,但基于虚拟内存(VSZ),后者本身不含实际物理页信息。真正反映物理内存消耗的是 RSS(Resident Set Size),即当前驻留在 RAM 中的物理页大小。

  • RSS 单位是 KB,不是 MB;显示值不含共享库重复计算,但包含所有私有匿名页 + 已映射且实际加载的共享库页
  • 要看某个进程的 RSS:
    ps -o pid,rss,comm -p <code>PID</code>
  • 想按 RSS 降序查前 10:
    ps -eo pid,rss,comm --sort=-rss | head -n 11
  • 注意:RSS 会把共享内存段(如 tmpfs、shm)也算进去,如果进程大量使用 /dev/shm,RSS 会虚高,但确实是物理内存占用

pmap 怎么确认某进程的物理内存分布?

pmap 不直接输出“物理内存总量”,而是列出每个内存段的映射详情,其中 MMAP 行末尾的 pages 列(如 123456K)才是该段当前实际驻留的物理内存大小。关键要看带 ---p 权限且非 [anon] 的共享段是否被重复计入。

  • 查看某进程所有映射及物理页占用:
    pmap -x <code>PID</code>
    输出中 RES 列就是该段的物理内存(KB),最后一行 total 是粗略 RSS 总和(与 ps 的 RSS 基本一致,但不含内核栈等隐式部分)
  • 若发现某 .so 库的 RES 异常高,可能是该进程触发了其大量代码/数据页加载,而非其他进程共享导致
  • pmap -XX <code>PID 可显示更细粒度的页类型(如 anon、file、shared),但需内核开启 CONFIG_PROC_PAGE_MONITOR,多数发行版默认关闭

为什么 ps RSS 和 top 中 RES 经常不一致?

这不是 bug,而是统计口径差异:top 的 RES 默认包含部分缓存页(如 page cache 中被该进程最近访问过的文件映射页),而 ps 的 RSS 严格只计已分配且未换出的用户态物理页。

Linux installer
Linux installer

先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。

下载
  • 同一时刻运行
    ps -o pid,rss -p <code>PID</code>
    和
    top -b -n1 -p <code>PID</code> | grep <code>PID</code>
    ,数值可能差几 MB
  • 这种差异在频繁读写大文件的进程(如数据库、压缩工具)上最明显
  • 真实物理压力应以 /proc/<code>PID/statm 第二列为准(单位为页),它和 ps RSS 最接近:
    awk '{print $2 * 4}' /proc/<code>PID</code>/statm

别忽略 /proc/PID/smaps 里的 PSS

RSS 会重复计算共享库,比如 10 个 Java 进程共用同一套 JRE,RSS 把每份都算一遍。真正衡量“这个进程独占+分摊的物理内存”要用 PSS(Proportional Set Size)。

  • 查单个进程总 PSS(KB):
    awk '/^Pss:/ {sum += $2} END {print sum}' /proc/<code>PID</code>/smaps
  • PSS 对容器内存限制、多实例部署容量规划更真实
  • 但注意:smaps 解析开销大,高频轮询会影响性能;生产环境慎用脚本反复扫

RSS 是运维快速定位内存大户的第一把手,PSS 才是资源核算的底线。共享库越重、进程越多,两者差距越大——盯着 RSS 做扩容,可能多买一倍内存。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

2025.09.05

530

5

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

2025.11.16

323

7

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

2025.11.17

513

20

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

2025.11.27

283

6

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3990

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3413

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2573

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6250

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5902

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习