pmap 是 linux 下查看进程内存映射的命令行工具,支持默认、扩展(-x)和详细(-xx)模式,可识别 heap、stack、共享库、匿名映射和映射文件等区域,常配合 ps、sort 等命令分析内存占用与泄漏。

pmap 是 Linux 下一个实用的命令行工具,用于显示指定进程的内存映射(memory map)详情,帮助你直观了解该进程在虚拟地址空间中如何分配和使用内存,比如代码段、堆、栈、共享库、内存映射文件等。
基本用法:查看进程内存分布
只需提供目标进程的 PID 即可:
-
pmap
—— 显示默认格式(简洁视图,按段分组) -
pmap -x
—— 显示扩展信息,含 RSS(常驻内存)、PSS(比例集大小)、Dirty(脏页)等列,适合分析实际内存占用 -
pmap -XX
—— 更详细的内部统计(需内核支持,部分发行版不启用)
识别关键内存区域
pmap 输出每行代表一个内存映射区,字段依次为:起始地址、大小(KB)、权限(rwxp)、偏移、设备号、inode、路径(若为文件映射)。重点关注以下几类:
本书以培养高级网站建设与管理人才为目标,内容循序渐进,由浅入深,通过大量的实例系统全面地介绍了Linux+PHP+MySQL环境下的网络后台开发技术。本书详尽分析了近30个典型案例。包括计数器、网站流量统计、留言板、论坛系统、聊天室、投票与调查、用户管理、新闻发布系统、广告轮播、购物系统等等,力求让读者通过对案例的学习,轻松掌握PHP和MySQL的编程精要,迅速掌握网络后台开发技巧。 本书适
- [heap] —— 堆内存,malloc/new 分配的动态内存,大小持续增长可能暗示内存泄漏
- [stack] —— 主线程栈,通常 8MB 左右;多线程会显示多个 stack(如 [stack:12345])
- shared libraries —— 如 /lib64/libc.so.6,注意其大小包含代码+数据,但多进程共享,RSS 不全归该进程
- [anon] —— 匿名映射(如 mmap(MAP_ANONYMOUS)),常见于大块堆分配或 JVM 的直接内存
- mapped files —— 如 /usr/bin/bash 或日志文件,说明进程通过 mmap 加载或访问了该文件
结合其他命令快速定位问题
pmap 本身不实时监控,需配合其他工具增强分析能力:
- 找 PID:ps aux | grep your_app 或 pidof nginx
- 看总体内存:ps -o pid,rss,vsz,comm -p
对比 RSS 和 pmap 总和是否一致 - 查大内存块:pmap -x
| sort -k3 -n -r | head -10 —— 按 RSS 降序列出前 10 大映射区 - 确认是否为内存泄漏:pmap -x
多次执行,观察 [heap] 或 [anon] 区域是否持续增长
注意事项与局限性
pmap 展示的是进程的虚拟内存布局,并非所有区域都真实占用物理内存。例如:
- 写时复制(COW)页面在未修改前不计入独占 RSS
- swap 中的页面仍算在 VSZ,但不在 RSS 中
- 内核线程(如 kthreadd)无用户态内存映射,pmap 可能报“no maps”
- 容器环境中的 PID 命名空间需确保在对应 namespace 内执行,否则看不到目标进程









