专业的编程技术博客社区

网站首页 > 博客文章 正文

每日一个Linux命令解析——pmap

baijin 2024-12-28 23:03:17 博客文章 8 ℃ 0 评论

pmap:pmap 是一个 Linux 系统下的工具,用于显示指定进程的内存映射信息。它对调试和分析进程的内存使用情况非常有用。

一、语法

pmap [选项] PID

二、选项

  • -x, --extended:显示详细信息。
  • -X:显示更详细的信息。
    警告:格式会根据 /proc/PID/smaps 的内容而变化。
  • -XX:显示内核提供的所有信息。
  • -c, --read-rc:读取默认的配置文件 (rc)。
  • -C, --read-rc-from=<file>:从指定文件读取配置文件。
  • -n, --create-rc:创建新的默认配置文件。
  • -N, --create-rc-to=<file>:创建新的配置文件并保存到指定文件中。
    注意:使用 -n 或 -N 时,不能指定进程 ID 参数。
  • -d, --device:显示设备格式信息。
  • -q, --quiet:不显示头部和尾部信息。
  • -p, --show-path:在映射信息中显示路径。
  • -A, --range=<low>[,<high>]:将结果限制在指定的地址范围内。
  • -h, --help:显示帮助信息并退出。
  • -V, --version:输出版本信息并退出。

三、示例

  1. 显示更详细的信息(包括大小、RSS、PSS、共享和私有内存等)。
pmap -x 1234
  1. 汇总显示进程的内存占用统计。
pmap -d PID

四、示例分析

运行 pmap -x `pidof dockerd`会输出:

Address           Kbytes     RSS   Dirty Mode  Mapping
000000c000000000   61440   24216   24216 rw---   [ anon ]
000000c003c00000    4096       0       0 -----   [ anon ]
000055a3db326000   22528       0       0 r---- dockerd
000055a3dc926000   30452    1452       0 r-x-- dockerd
000055a3de6e3000    4456     884       0 r---- dockerd
000055a3deb3e000   29152    8128    6076 r---- dockerd
000055a3e07b6000    1212     732     720 rw--- dockerd
000055a3e08e5000     340     160     160 rw---   [ anon ]
000055a3e16ca000     132      20      20 rw---   [ anon ]
00007fbd18000000     132       4       4 rw---   [ anon ]
00007fbd18021000   65404       0       0 -----   [ anon ]
00007fbd1dffc000       4       0       0 -----   [ anon ]
00007fbd1dffd000    8192       8       8 rw---   [ anon ]
00007fbd1e7fd000       4       0       0 -----   [ anon ]
00007fbd1e7fe000    8192       8       8 rw---   [ anon ]
00007fbd1effe000       4       0       0 -----   [ anon ]
00007fbd1efff000    8192       8       8 rw---   [ anon ]
00007fbd1f7ff000       4       0       0 -----   [ anon ]

各列含义

  1. Address:内存地址范围的起始地址。
  2. Kbytes:该内存区域的大小(以 KB 为单位)。
  3. RSS (Resident Set Size):驻留内存量,表示实际占用物理内存的大小(以 KB 为单位)。
  4. Dirty:脏页的大小,表示被修改但尚未写回磁盘的内存量(以 KB 为单位)。
  5. Mode:内存权限模式:
  • r:可读
  • w:可写
  • x:可执行
  • p:私有(写时复制)
  • s:共享
  1. Mapping:该内存映射关联的文件或区域名称:
  • [heap]:堆内存
  • [stack]:栈内存
  • /path/to/file:文件映射
  • [anon]:匿名内存映射
  1. 最后一行会显示:

total kB:总结进程使用的虚拟内存、物理内存和脏内存总量。

五、应用场景

  1. 调试内存泄漏:结合 RSS 和 Dirty 判断某些内存区域是否异常增长。
  2. 分析进程内存结构:查看栈、堆以及文件映射区域的内存使用情况。
  3. 性能优化:定位高内存占用模块,减少内存使用。

如需更深入的分析,可以结合 smaps 文件(位于 /proc/<PID>/smaps)获取更详细的内存统计数据。

#Linux命令#

"码字不易!喜欢就点个赞吧,你的支持是我继续分享的动力!"


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表