pmap -x 用于查看进程内存映射的扩展信息,关键列包括size(虚拟内存)、rss(常驻集)、dirty(脏页)和pss(比例集大小),其中pss能更准确反映单个进程实际占用的物理内存。

pmap -x 是 Linux 中用于查看进程内存映射的常用工具,但它本身并不直接显示页表占用或共享内存段的详细资源分布。需要澄清一点:Linux 没有名为 pmap-x-p 的命令;你可能是想用 pmap -x(带 -x 选项的 pmap)来分析指定进程的内存使用情况,尤其是关注 RSS、SIZE、PSS 和共享内存相关字段。
理解 pmap -x 输出的关键列含义
pmap -x 会以扩展格式列出进程所有内存映射段,并包含三列关键数值:
- size:虚拟内存总大小(KB),即该段申请的地址空间总量,不含实际物理页
- rss:常驻集大小(KB),表示当前驻留在物理内存中的页数(含共享页)
- dirty:脏页大小(KB),仅对私有写时复制(COW)映射有意义,不适用于共享内存段
- pss(Proportional Set Size):比例集大小(KB),是更准确的“单个进程实际占用物理内存”的指标——共享页按共享进程数均摊。例如某页被 3 个进程共享,则每个进程的 PSS 计入 1/3 页
识别共享内存段(如 shm、tmpfs、mmap SHARED)
共享内存段通常表现为以下特征:
- 权限标记含 s(如
rw-s--表示 shared read-write) - 映射源为
/dev/zero、/SYSV*(System V 共享内存)、[shmid=...]、/run/shm/...或anon_inode:[shm] - RSS 值较高但 PSS 显著低于 RSS,说明该段被多个进程共享
执行示例:pmap -x 1234 | grep -E "(shmid|/SYSV|/run/shm|anon_inode\[shm\]|rw-s)"
估算页表开销(间接方法)
Linux 内核不通过 pmap 暴露页表自身占用(如 PGD/PUD/PMD/PTE 结构内存),因为这部分属于内核内存管理开销,用户态不可见。但可做合理推断:
- 每个普通用户页(4KB)至少需一个 PTE(8 字节),页表总开销 ≈ 总映射页数 × 8B(粗略下限)
- 大页(2MB/1GB)显著降低页表层级与条目数,可通过
pmap -X(注意是大写 X)查看MMUPageSize和MMUPageCount列确认是否启用大页 - 真正诊断页表压力应结合
/proc/中/smaps Pagination相关字段(如MMUPageSize、MMUPF)及内核日志
补充建议:结合 /proc/pid/smaps 获取更细粒度信息
若需深入分析共享内存归属或页表行为,推荐直接读取 /proc/:
- 搜索
Shared_*字段(如Shared_Clean、Shared_Dirty)精确反映共享页状态 - 查找
MMUPageSize和MMUPF确认是否使用透明大页(THP) - 用
awk '/^Shared_/{sum+=$2} END{print sum}' /proc/1234/smaps快速汇总共享内存 KB 总量











