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、路径(若为文件映射)。重点关注以下几类:
- [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 展示的是进程的虚拟内存布局,并非所有区域都真实占用物理内存。例如: