要精准分析进程内存映射,必须用pmap配合真实pid操作:先用ps aux | grep 进程名 | grep -v grep获取pid,再执行sudo pmap pid、sudo pmap -x pid或sudo pmap -s pid分别查看基础映射、扩展统计(含rss/dirty)和总和摘要,并通过ps -o pid,rss -p pid验证rss一致性,重点关注anon行排查内存泄漏。

在终端查看进程内存映射
要精准分析某个进程内部各内存段(如堆、栈、共享库、匿名映射)的分布与大小,必须使用pmap命令配合进程PID操作,直接读取/proc/[pid]/maps原始数据并结构化输出。
获取目标进程PID
先确认你要分析的进程是否正在运行,并拿到它的唯一数字标识。打开终端后执行:
ps aux | grep 【进程名】,例如 ps aux | grep firefox;注意过滤掉grep自身:ps aux | grep firefox | grep -v grep。
从结果中找到对应行第一列的数字,那就是该进程的PID——【pmap必须使用真实PID,不能用名称代替】。
执行pmap查看内存映射详情
方法一:基础映射列表
输入 sudo pmap PID,例如 sudo pmap 1234;会列出所有内存段起始地址、大小、权限标记(rwxp)和映射来源(如/lib/x86_64-linux-gnu/libc.so.6)。
方法二:扩展格式含RSS与Dirty值
执行 sudo pmap -x PID,例如 sudo pmap -x 1234;-x参数启用三列扩展输出:Kbytes(段大小)、RSS(实际驻留物理内存)、Dirty(未写回磁盘的私有脏页字节数)。这个视图能帮你判断是否存在大量未释放的malloc内存或异常增长的匿名映射。
方法三:仅显示总和摘要
运行 sudo pmap -s PID,例如 sudo pmap -s 1234;立刻返回“mapped”、“writeable/private”、“shared”三项总KB数,适合快速评估进程整体内存足迹。
验证RSS一致性
第一步:用 ps -o pid,rss -p PID 查出该进程当前RSS值,例如 ps -o pid,rss -p 1234。
第二步:对比 pmap -x 输出最后一行的RSS总和,二者应基本一致;若偏差超过5%,说明内核统计存在延迟或该进程刚释放大量内存但页表尚未刷新。
第三步:重点关注pmap -x结果中“anon”开头的行——这些是堆或mmap分配的匿名内存,若单行超过100MB且持续存在,极可能是内存泄漏源头。











