pmap -x [pid] 可查看进程完整虚拟内存映射,按地址升序列出各段的起始地址、大小、RSS、PSS等;重点关注[heap]、[stack]、[vdso]及匿名映射,结合sort和awk分析内存占用与泄漏。

直接用 pmap -x [pid] 就能看到特定进程完整的虚拟内存映射分布,它按地址升序列出所有内存段,包括起始地址、大小、权限、映射路径等关键信息。
获取目标进程 PID
先确认你要分析的进程 ID:
- 查正在运行的服务:如
pgrep -f "nginx"或pidof java - 模糊匹配进程名:如
ps aux | grep redis-server,从输出中提取第一列数字(PID) - 查看所有用户进程:用
ps -eo pid,comm,rss,vsz --sort=-rss | head -10找内存占用靠前的进程
执行 pmap 查看内存布局
拿到 PID 后,推荐使用扩展模式获取最实用的信息:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
pmap -x [pid]:显示 Address、Kbytes、RSS、PSS、Dirty 和 Mapping 列,适合判断真实内存压力 -
pmap [pid]:默认简洁格式,只显示地址、大小和映射路径,适合快速浏览结构 -
pmap -XX [pid]:更底层统计(如 MMU 页表项),但需内核支持,部分系统不可用
识别关键内存段含义
输出中每行代表一个 VMA(Virtual Memory Area),重点关注以下几类:
- [heap]:brk 系统调用扩展的堆区,malloc 小块内存就从中分配;持续增长可能提示泄漏
-
[stack]:主线程栈,通常约 8MB;多线程会看到类似
[stack:12345]的条目 - [vdso] / [vvar]:内核提供给用户态的只读共享页,用于加速系统调用
-
带路径的行:如
/lib/x86_64-linux-gnu/libc.so.6,表示共享库或映射文件 - [anon] 或无路径行:匿名映射,常见于大块 malloc(mmap 分配)、JVM 直接内存等
结合排序定位大内存区域
单看输出不易发现异常,可配合 shell 工具快速筛查:
- 按 RSS 降序找实际占物理内存最多的段:
pmap -x [pid] | sort -k3 -n -r | head -10 - 统计总 RSS 是否与
ps一致:pmap -x [pid] | tail -1 | awk '{print $3}'对比ps -o rss= -p [pid] - 监控变化趋势:写个简单循环,每隔几秒输出一次 heap 大小,观察是否持续上升










