pmap¶
pmap
是一个用于查看进程内存映射的命令行工具,通常用于分析进程的内存使用情况。
1 语法¶
pamp 显示的内容较多,一般我们直接输出到文件,`pmap [option] pid > file`
pmap [options] pid [...]
1.1 常用参数¶
pmap
是一个用于查看进程内存映射的命令行工具,通常用于分析进程的内存使用情况。以下是一些常用的 pmap
参数和选项:
-x
:显示详细信息。使用此选项将显示更多关于内存映射的详细信息,包括每个映射的起始地址、权限、偏移量等。-d
:显示以字节为单位的内存映射大小。默认情况下,pmap
显示内存映射的大小以 KBytes 为单位,但使用-d
选项将以字节为单位显示。-q
:安静模式。禁用标题行的输出,仅显示内存映射的详细信息。-p
:指定要查看的进程 ID。通过此选项,您可以指定要分析的特定进程,而不是当前 shell 中的进程。-h
:以人类可读的格式显示内存大小。这将以更易读的方式显示内存映射的大小,如 KB、MB 或 GB。-N
:以内存映射名称进行排序。使用此选项可以按照内存映射的名称对输出进行排序。-t
:按照内存映射的起始地址进行排序。使用此选项可以按照内存映射的起始地址对输出进行排序。-X
:显示扩展信息。此选项将显示更多与进程内存相关的信息,如共享内存段、堆栈信息等。-A
:显示所有内存映射。默认情况下,pmap
只显示正在使用的内存映射,使用此选项将显示所有内存映射,包括未使用的部分。-F
:强制显示所有内存映射。与-A
类似,但它将强制显示所有内存映射,即使它们被标记为不可访问或不可用。
1.2 输出解释¶
这是一个进程的 pmap
输出示例:
Address Kbytes RSS Dirty Mode Mapping
0000555555554000 84 52 0 r-x-- my_program
0000555555555000 4 4 4 r---- my_program
0000555555556000 4 4 4 rw--- my_program
00007ffff7a40000 1644 316 0 r-x-- libc-2.33.so
00007ffff7b9a000 2048 220 0 ----- libc-2.33.so
00007ffff7db9000 16 16 16 r---- libc-2.33.so
00007ffff7dbd000 4 4 4 rw--- libc-2.33.so
...
- Address: 此列显示内存映射区域的起始地址。
- Kbytes: 内存映射的总大小,以千字节为单位。
- RSS (Resident Set Size): 当前在 RAM 中的内存映射部分的大小(以千字节为单位)。这表示进程实际使用的物理内存。
- Dirty: 内存映射中已修改的部分(以千字节为单位)。这表示需要写回磁盘的内存量。
- Mode: 此列显示与内存映射相关的权限:
- Mapping: 此列通常提供了已映射区域的描述,可以是共享库或可执行文件的名称。
1.2.1 Mode¶
pmap
输出结果中的 "mode" 列表示内存映射的权限和特性,它通常由一个字符串表示,其中包含以下标志的组合:
r
:表示可读权限(Read),允许从内存映射中读取数据。w
:表示可写权限(Write),允许向内存映射中写入数据。x
:表示可执行权限(eXecute),允许从内存映射中执行代码。s
:表示共享权限(Shared),多个进程可以共享相同的内存映射。p
:表示私有权限(Private),内存映射是进程私有的,不与其他进程共享。
以下是一些示例 "mode" 列及其含义:
rw-p
:可读可写,私有映射。r-xp
:可读可执行,私有映射。r--s
:只读,共享映射。
这些权限标志是用来描述内存映射的访问权限的,对于理解进程如何使用内存非常重要。例如,如果您看到一个内存映射的 "mode" 是 rwxp
,那么它表示该内存区域可读、可写、可执行,并且是私有的,只属于当前进程。如果 "mode" 是 r--s
,则表示该内存区域只读,并且是共享的,其他进程可能会共享相同的内存映射。
1.3 不同参数输出结果显示¶
pmap
pmap -x
pmap -X
pmap -XX
pmap -d
pmap -p