Linux查看物理内存映射到进程空间详细地址的方法
如果你想准确查看每个内存段的起始地址以及 RSS(实际驻留在物理内存中的大小,单位 KB),那么pmap -x PID就是最直接、最实用的命令。默认执行 pmap 只会列出地址和映射路径,无法判断进程到底真实占用了多少物理内存。pmap -x 的输出包含 Address、Kbytes、RSS、Dir
如果你想准确查看每个内存段的起始地址以及 RSS(实际驻留在物理内存中的大小,单位 KB),那么pmap -x PID就是最直接、最实用的命令。默认执行 pmap 只会列出地址和映射路径,无法判断进程到底真实占用了多少物理内存。pmap -x 的输出包含 Address、Kbytes、RSS、Dirty、Mode、Mapping 六列信息,其中 RSS 的总和通常接近进程实际使用的物理内存大小,适合快速定位堆区、数据段、匿名映射等关键内存区域。

直接用 pmap -x 查地址和物理内存占用,不要只看默认输出
不带 -x 参数的 pmap 只能显示十六进制地址和映射路径,根本无法看出具体哪一段占用了多少物理内存。排查 Linux 进程内存问题时,真正有价值的是每段内存的 RSS(驻留物理内存)和起始地址,而这些信息只有通过 pmap -x 才能完整看到。
很多人常犯的错误是直接执行 pmap 12345,然后面对一堆地址无从下手——因为默认输出不会告诉你哪些页面真正驻留在 RAM 中,也无法进一步区分哪些属于堆、哪些属于共享库数据段或匿名映射。
pmap -x输出固定六列:Address(起始虚拟地址)、Kbytes(映射总大小)、RSS(实际占用的物理内存 KB)、Dirty(已写入但尚未刷盘的页)、Mode(权限标记,如rw-p)、Mapping(映射来源)RSS总和 ≈ 进程当前实际占用的物理内存,与ps -o rss= -p的结果通常接近,但pmap -x能进一步细分到每一个内存段- 地址列(
Address)使用十六进制表示,可直接配合gdb attach,再用x/10xw 0x56442a9b7000检查对应地址中的内容
Mapping 列怎么快速判断堆区、数据段和匿名映射
Mapping 并不是简单的类型标签,而是内核记录的映射来源,因此需要结合 Mode 权限和上下文一起判断:
[heap]:表示通过brk扩展出来的堆内存区域,Mode通常为rw-p。如果这部分RSS持续上涨,往往说明malloc/free不匹配,存在堆内存泄漏风险[anon]:泛指所有没有文件 backing 的匿名映射,包括大块malloc(通过mmap分配)、线程栈、JVM DirectBuffer 等。如果多个小的[anon]区域加起来RSS很大,通常意味着 native 层内存分配失控- 带文件路径的行(如
/usr/bin/python3.10)且Mode为rw-p:一般对应 ELF 文件中的.data和.bss段,看到的RSS就是它当前实际占用的物理内存 [stack]或[stack:12345]:表示主线程栈或某个线程栈,通常RSS在 1–8MB 左右。如果这里出现明显暴涨,要重点怀疑栈溢出、递归过深或线程栈异常膨胀
为什么 /proc//smaps 比 pmap -x 更适合做精确分析
pmap -x 中的 RSS 是对各段做简单汇总,而 /proc/ 会对每个 VMA 分别统计,并把共享内存按比例摊销,这才更接近“单个进程真实内存开销”的分析依据。
- 重点看三列:
Rss(与pmap -x的 RSS 总和接近)、Pss(共享内存均摊后的结果,分析整机内存压力时非常关键)、Private_Dirty(判断泄漏最有价值的指标,持续增长通常表示进程自己在malloc后写入且没有释放) - 查看堆区:
grep -A 5 "heap" /proc/,重点观察/smaps Private_Dirty是否持续偏高 - 查看数据段:
awk '/^Name:/ && /data/ { getline; print }' /proc/,用于筛选 .data/.bss 相关内容/smaps - 注意:
smaps的行数往往非常多,可能达到上千行,不要直接用cat全量查看,最好配合grep或awk有针对性地提取需要的信息
pmap -d 并不是可用选项,别在这上面浪费排查时间
在主流 Linux 发行版中,例如 Ubuntu、CentOS、Debian,自带的 pmap 通常都不支持 -d 参数。执行 pmap -d 时,常见结果是报错 invalid option -- 'd',或者直接输出帮助信息。
- 如果你想查看“设备号与偏移量”这类更底层的信息,其实应该去看
/proc/的原始内容:第五列是/maps mj:mn(主设备号和次设备号),第六列是inode,第七列是文件路径 - 如果想确认某个内存段是不是纯匿名映射,可以使用:
cat /proc/,当设备号为/maps | awk '$5 == "00:00" && $7 == "" {print}' 00:00且没有路径时,通常就是真正的匿名映射 - 遇到需要深入分析 Linux 进程内存映射的场景,推荐的正确步骤是:
pmap -x先快速定位问题区域 →/proc/验证/smaps Private_Dirty等关键指标 → 必要时再回看/proc/检查原始权限和设备字段/maps
虚拟地址映射本身通常是固定可见的,但某个物理页是否真正驻留在 RAM 中、是否属于共享页、以及是否已经被进程写脏,都必须结合 RSS、Pss、Private_Dirty 这三项指标交叉分析。少看其中任意一项,都有可能把共享库页误判成内存泄漏来源,影响 Linux 内存问题定位的准确性。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
VMware安装Ubuntu完整教程:创建虚拟机与启动验证
本教程详细演示如何在VMware中创建Ubuntu虚拟机,涵盖ISO挂载、硬件配置、安装向导及启动验证。通过清晰的步骤与验证命令,帮助新手快速搭建可用的Linux学习环境。
Win10专业版U盘安装教程:制作启动盘与完整安装步骤
本文提供Win10专业版U盘安装完整流程:准备8GB以上U盘与官方镜像,制作启动盘并核对盘符;通过F12 F11 Esc等快捷键或BIOS设置U盘为第一启动项;安装时选择专业版并谨慎分区;完成后在“设置—系统—关于”验证版本与激活状态。操作前务必备份数据。
Windows10系统字体太小怎么调大
Windows10系统字体太小怎么调大?只需两步:首先打开设置中的显示选项,将缩放比例调整为125%或150%;随后运行ClearType文本调谐器优化字体清晰度。此方法适用于高分屏及普通屏幕,无需修改注册表即可解决界面拥挤问题。
Win10磁盘占用100%基础排查:从监控到清理的完整步骤
Windows 10系统出现磁盘占用100%会导致电脑卡顿、程序响应缓慢。本文提供基础排查方案:首先通过任务管理器确认是否为磁盘高负载,随后进入系统存储页面分析C盘占用类别,最后针对性清理临时文件。遵循此流程可有效缓解磁盘压力,避免盲目重装系统。
Windows10系统怎么显示此电脑和控制面板
Windows10默认可能不显示桌面图标,导致找不到“此电脑”和“控制面板”。只需进入个性化设置,在“桌面图标设置”中勾选对应选项即可恢复。本文提供详细图文步骤,帮助快速找回系统入口。
- 热门数据榜
1
2
3
4
5
6
7
8
9
10
相关攻略
2026-09-01 16:50
2026-09-01 16:50
2026-08-27 15:46
2026-08-27 15:45
2026-08-27 15:45
2026-08-27 15:45
2026-08-27 15:44
2026-08-27 15:44
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

