怎么在Linux利用Pmap查看特定进程内存映射段详情

千明吖_5715

千明吖_5715

2026-04-14

459人浏览

原创

pmap是linux下查看进程内存映射的命令行工具,读取/proc/[pid]/maps输出进程各内存段(代码、堆、栈、共享库、匿名映射等)的地址、大小、rss、权限及映射来源等详情。

怎么在linux利用pmap查看特定进程内存映射段详情

什么是 pmap,它能看什么

pmap 是 Linux 下一个轻量但精准的进程内存映射查看工具,它读取 /proc/[pid]/maps 并格式化输出,告诉你某个进程(比如 nginx 或你自己的 python3 脚本)到底加载了哪些内存段:可执行代码段、堆、栈、共享库、匿名映射、mmap 分配区等。它不采样、不估算,就是直接 dump 内核当前记录的映射快照。

注意:pmap 本身不分析内存泄漏,也不显示谁分配了某块内存——它只回答“这块地址现在映射了什么”,而不是“谁申请的”。想定位泄漏得配合 gdb、valgrind 或应用层 profiling。

怎么用 pmap 查看指定进程的完整映射详情

最常用的是加 -x(扩展模式)或 -XX(更详细,含 RSS/Dirty 等),再跟上进程 PID:

pmap -x 12345

其中 12345 是目标进程 PID。如果你只知道进程名,先用 pgrep 或 pidof 获取:

  • pgrep -f "python3 myapp.py"
  • pidof nginx(注意可能返回多个 PID,选主 worker 或 master)

常见误区:

Obsidian (Linux)
Obsidian (Linux)

操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

下载
  • 直接 pmap python3 会报错——pmap 必须接数字 PID,不接受进程名
  • 对没有权限的进程(如其他用户启动的 systemd 服务),会提示 Permission denied;此时需 sudo pmap -x [pid],但注意:sudo 后看到的仍是该进程当时的映射,不是“提权后才有的”

pmap 输出各列含义和关键判断点

以 pmap -x [pid] 输出为例,典型列是:Address、Kbytes、RSS、Dirty、Mode、Mapping:

  • Address:起始虚拟地址(十六进制),可用于在 gdb 中检查某段内容
  • Kbytes:该段总大小(KB),包括未实际使用的页
  • RSS:常驻集大小(KB),即当前真正驻留在物理内存中的页数——比 Kbytes 小说明有部分被 swap 或尚未分配物理页
  • Dirty:被修改过、尚未写回磁盘的私有页(KB),值大可能意味着频繁写堆或 mmap 匿名区
  • Mode:权限标志,如 rw-p(可读写、私有)、r-xp(可执行)、---p(无权限,可能是 guard page)
  • Mapping:映射来源,空表示匿名映射(如堆、栈、mmap(MAP_ANONYMOUS)),否则是路径(如 /lib/x86_64-linux-gnu/libc.so.6)

重点关注:anon 行(匿名映射)、[heap]、[stack] 和反复出现的大块 .so 库——它们往往是内存大户或加载异常的线索。

为什么有时 pmap 显示的 RSS 和 ps 不一致

ps aux --sort=-%mem 里的 %MEM 和 RES 列,底层也来自 /proc/[pid]/statm,但计算粒度与 pmap 不同:

  • ps RES 是粗略的 RSS 总和,不含某些内核跟踪的细粒度页(如 page table 自身开销)
  • pmap -x 的 RSS 是逐段累加,更贴近 /proc/[pid]/smaps 的 Rss: 字段,精度更高
  • 若发现 pmap RSS 比 ps RES 高出明显(比如 >10%),大概率是该进程用了大量 mmap 匿名映射(如 JVM 的 metaspace、Python 的 mmap 文件读取),而 ps 对这类映射统计不全

真要深挖差异,直接看 /proc/[pid]/smaps 更可靠,但可读性差;pmap 是平衡可读性与准确性的第一站。

别指望靠 pmap 一眼看出内存泄漏——它只告诉你“现在什么样”,不告诉你“为什么变成这样”。需要结合时间维度(多次 pmap -x 对比)、分配上下文(如是否调用了 mmap 或 brk)、以及应用逻辑才能归因。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

457

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

940

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

3012

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

996

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

889

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

454

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2736

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

5132

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

807

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习