Linux中查看进程内存映射与分配主要通过/proc/[pid]/maps(映射关系)、smaps(详细统计含PSS/RSS)、status(整体摘要),辅以pmap工具;普通用户可读大部分信息,但完整内存内容需权限。

在 Linux 中查看进程的内存映射与分配情况,主要依赖 /proc/[pid]/ 下的虚拟文件系统,尤其是 maps、mem(需权限)、smaps 和 status 等文件。普通用户无需 root 权限即可读取大部分信息,但部分细节(如完整内存内容)受限制。
用 /proc/[pid]/maps 查看内存区域映射
该文件以文本形式列出进程所有虚拟内存段的起始/结束地址、权限、偏移、设备号、inode 及映射路径(如可执行文件、共享库、堆、栈等)。
- 运行
cat /proc/1234/maps(将 1234 替换为实际 PID)可快速浏览 - 每行格式示例:
7f8b2c000000-7f8b2c021000 rw-p 00000000 00:00 0 [heap],其中rw-p表示可读写、私有;[heap]或[stack]是内核标注的匿名区域 - 注意:只显示映射关系,不反映实际物理内存占用或是否已分配页
用 /proc/[pid]/smaps 查看详细内存使用统计
smaps 是 maps 的增强版,为每个内存区域提供 RSS、PSS、Swap、MMU 页面数、脏页、共享/私有内存等精细指标,适合分析内存泄漏或大内存消耗原因。
-
Pss(Proportional Set Size)是关键指标,按共享比例折算后的真实内存贡献,比 RSS 更公平地反映单个进程的实际内存开销 - 可用
grep -i "pss\|rss\|size" /proc/1234/smaps | awk '{sum += $2} END {print sum}'快速汇总 PSS 总和(单位 KB) - 含
MMUPageSize和MMUPageCount字段,可用于判断是否启用大页(Huge Pages)
用 /proc/[pid]/status 获取整体内存摘要
该文件提供进程内存使用的概览数据,适合快速定位异常。
-
VmSize:虚拟内存总大小(含未分配的 mmap 区域) -
VmRSS:常驻内存集(Resident Set Size),即当前实际占用物理内存的页数 -
VmData、VmStk、VmExe分别对应数据段、栈、代码段大小 - 配合
ps -o pid,rss,vsize,comm -p 1234可做横向对比
辅助工具:pmap 和 smaps 工具化分析
pmap 是封装 /proc/[pid]/maps 的命令行工具,支持简洁输出与排序。
-
pmap -x 1234显示扩展视图(包括 RSS、Dirty、Mapping 名称) -
pmap -XX 1234输出更详细的 per-mapping 统计(含 PSS,需较新版本) - 若需长期监控,可结合
watch -n 1 'pmap -x 1234 | tail -n 1'观察 RSS 动态变化


















