游乐游手机版
首页/系统平台/文章详情

Linux查看物理内存映射到进程空间详细地址的方法

时间:2026-08-18 17:10
如果你想准确查看每个内存段的起始地址以及 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 的总和通常接近进程实际使用的物理内存大小,适合快速定位堆区、数据段、匿名映射等关键内存区域。

Linux怎么查看具体的物理内存映射到进程空间的详细地址

直接用 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//smaps 会对每个 VMA 分别统计,并把共享内存按比例摊销,这才更接近“单个进程真实内存开销”的分析依据。

  • 重点看三列:Rss(与 pmap -x 的 RSS 总和接近)、Pss(共享内存均摊后的结果,分析整机内存压力时非常关键)、Private_Dirty(判断泄漏最有价值的指标,持续增长通常表示进程自己在 malloc 后写入且没有释放)
  • 查看堆区:grep -A 5 "heap" /proc//smaps,重点观察 Private_Dirty 是否持续偏高
  • 查看数据段:awk '/^Name:/ && /data/ { getline; print }' /proc//smaps,用于筛选 .data/.bss 相关内容
  • 注意: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 内存问题定位的准确性。

来源:https://www.php.cn/faq/2955450.html
上一篇Linux查看系统平均负载的方法与命令 下一篇CentOS 7防火墙入站规则配置方法详解
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
VMware安装Ubuntu完整教程:创建虚拟机与启动验证
系统平台 · 2026-09-01

VMware安装Ubuntu完整教程:创建虚拟机与启动验证

本教程详细演示如何在VMware中创建Ubuntu虚拟机,涵盖ISO挂载、硬件配置、安装向导及启动验证。通过清晰的步骤与验证命令,帮助新手快速搭建可用的Linux学习环境。

Win10专业版U盘安装教程:制作启动盘与完整安装步骤
系统平台 · 2026-09-01

Win10专业版U盘安装教程:制作启动盘与完整安装步骤

本文提供Win10专业版U盘安装完整流程:准备8GB以上U盘与官方镜像,制作启动盘并核对盘符;通过F12 F11 Esc等快捷键或BIOS设置U盘为第一启动项;安装时选择专业版并谨慎分区;完成后在“设置—系统—关于”验证版本与激活状态。操作前务必备份数据。

Windows10系统字体太小怎么调大
系统平台 · 2026-08-27

Windows10系统字体太小怎么调大

Windows10系统字体太小怎么调大?只需两步:首先打开设置中的显示选项,将缩放比例调整为125%或150%;随后运行ClearType文本调谐器优化字体清晰度。此方法适用于高分屏及普通屏幕,无需修改注册表即可解决界面拥挤问题。

Win10磁盘占用100%基础排查:从监控到清理的完整步骤
系统平台 · 2026-08-27

Win10磁盘占用100%基础排查:从监控到清理的完整步骤

Windows 10系统出现磁盘占用100%会导致电脑卡顿、程序响应缓慢。本文提供基础排查方案:首先通过任务管理器确认是否为磁盘高负载,随后进入系统存储页面分析C盘占用类别,最后针对性清理临时文件。遵循此流程可有效缓解磁盘压力,避免盲目重装系统。

Windows10系统怎么显示此电脑和控制面板
系统平台 · 2026-08-27

Windows10系统怎么显示此电脑和控制面板

Windows10默认可能不显示桌面图标,导致找不到“此电脑”和“控制面板”。只需进入个性化设置,在“桌面图标设置”中勾选对应选项即可恢复。本文提供详细图文步骤,帮助快速找回系统入口。