pmap用法小计

By francis_hao    Aug 4,2017

 

pmap-报告进程的内存映射。

 

概要

pmap [options] pid [...]

 

描述

pmap命令用来报告一个或多个进程的内存映射。

 

选项

选项

说明

-x, --extended

显示扩展的信息

-d, --device

显示设备的信息

-q, --quiet

不显示头或脚注

-A, --range low,high

只显示指定范围的地址空间,低地址和高地址分别用low和high指定,以逗号分隔

-X

显示比-x更详细的信息。但是会按照文件/proc/PID/smaps改变显示格式(显示的信息是该文件内容的简化)

-XX

显示一切内核提供的信息

-p, --show-path

显示文件项的全路径

-c, --read-rc

读默认配置(哪里的配置??什么作用?)

-C, --read-rc-from file

从file读配置

-n, --create-rc

新建默认配置

-N, --create-rc-to file

创建配置到file

-h, --help

显示帮助信息并退出

-V, --version

显示版本信息并退出

  

 

示例

1、一个最简单的c程序以静态编译后的pmap

int main(void)
{
    while(1);
    return 0;
}

其中,第一列表示虚拟空间地址,第二列表示该项在虚拟空间中占用的大小,第三列表示权限,第四列表示该项名称(anon是佚名的)。

2、-x选项

3、-d选项    

4、-X选项

名词解释

RSS

resident set size, the non-swapped physical memory that a task has used, (alias rssize, rsz)

PSS

proportional set size, composed by the private memory of that process plus the proportion of shared memory with one or more other processes. Unshared memory including the proportion of shared memory is reported as the PSS

  
  

 

 

 


本文由 刘英皓 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自:http://www.cnblogs.com/yinghao1991/p/7287941.html

 

 

参考

【1】博客园 http://www.cnblogs.com/xiaohexiansheng/p/5500870.html gcc static静态编译选项提示错误

【2】优快云 http://blog.youkuaiyun.com/adaptiver/article/details/7084364 内存耗用:VSS/RSS/PSS/USS

【2】man pmap

 

转载于:https://www.cnblogs.com/yinghao1991/p/7287941.html

<think>好的,我现在要了解pmap的原理。首先,我需要知道pmap是什么,它有什么作用。根据之前学过的Linux命令,pmap可能和进程内存有关,因为名字里有“p”(进程)和“map”(映射)。是不是用来查看进程内存映射的工具? 然后,用户问的是pmap的原理,所以需要深入它的工作机制。可能需要查阅相关资料或手册页。记得pmap命令可以显示进程的内存地址空间,包括各个段的信息,比如堆、栈、共享库等。那它的原理应该是通过读取进程的内存映射信息,并将其展示出来。 接下来,Linux系统中进程的内存信息通常保存在/proc文件系统里。每个进程有一个目录,比如/proc/<PID>/,里面的maps文件包含了内存映射的信息。所以pmap可能就是读取/proc/<PID>/maps和/proc/<PID>/smaps这两个文件的内容,解析后输出给用户。 另外,pmap的输出信息可能包括地址范围、权限、偏移量、设备、inode和路径名等。这些信息都是从maps文件中获取的。而更详细的内存使用情况,比如RSS(驻留集大小)、PSS(比例集大小)等可能需要从smaps文件中获取。 需要注意的是,pmap可能有不同的选项,比如显示扩展信息(-X选项),这时候会调用更多的数据,比如计算PSS,这涉及到共享内存的处理。每个共享库被多个进程使用时,PSS会按比例分配这部分内存,这样更准确反映实际内存使用。 然后,pmap的实现可能涉及到解析这些文件的结构,将每一行分割成不同的字段,并根据需要计算统计信息,如总内存使用量。此外,权限字符(r读,w写,x执行,s共享,p私有)的解析也是必要的。 可能还需要考虑权限问题,pmap需要访问/proc下的文件,所以执行pmap的用户必须有权限查看目标进程的信息。否则会报权限错误。 总结一下,pmap的原理主要是通过读取和解析/proc/<PID>/maps和smaps文件,提取进程的内存映射信息,并以用户友好的方式展示出来。同时,根据不同的选项参数,进行额外的计算和统计,如PSS的计算,来帮助用户更准确地了解进程的内存使用情况。</think>pmap 是一种用于查看进程内存映射的 Linux 工具。其原理可分为以下步骤: --- ### **1. 数据来源:/proc 文件系统** pmap 的核心数据来自 Linux 的 `/proc` 虚拟文件系统。每个进程的目录 `/proc/<PID>/` 包含以下关键文件: - **`maps`**: 记录进程的虚拟内存区域(VMA)信息,包括地址范围、权限、映射文件等。 - **`smaps`**: 提供更详细的内存统计(如 RSS、PSS、Swap 等)。 --- ### **2. 解析内存映射信息** pmap 读取 `/proc/<PID>/maps` 并解析每一行的字段,例如: ```plaintext 55a1b1c00000-55a1b1c01000 r--p 00000000 08:01 123456 /usr/bin/bash ``` - **地址范围**: `55a1b1c00000-55a1b1c01000` - **权限**: `r--p`(可读、私有) - **偏移量**: `00000000` - **设备号**: `08:01` - **Inode**: `123456` - **映射文件**: `/usr/bin/bash` --- ### **3. 统计内存使用量** 若使用 `pmap -X` 等扩展选项,工具会进一步读取 `/proc/<PID>/smaps`,计算以下指标: - **RSS(Resident Set Size)**: 实际驻留在物理内存中的大小。 - **PSS(Proportional Set Size)**: 按共享内存的进程数分摊后的内存占用(更准确)。 - **Swap**: 被交换到磁盘的内存大小。 --- ### **4. 权限与共享状态解析** pmap 解析权限字段(如 `rwxp`)和共享标志(`s` 表示共享,`p` 表示私有),帮助用户判断内存区域用途(如代码段、堆、栈等)。 --- ### **5. 输出格式化** 将解析后的数据按用户友好的格式输出,例如: ```plaintext Address Kbytes RSS PSS Swap Mode Mapping 55a1b1c00000 4 4 1 0 r--p bash ``` --- ### **核心原理总结** $$ \text{pmap} = \text{读取/proc/<PID>/maps与smaps} + \text{解析字段} + \text{计算统计量} + \text{格式化输出} $$ --- ### **实际应用示例** ```bash # 查看进程 1234 的内存映射 pmap 1234 # 显示详细内存统计(包括 PSS) pmap -X 1234 ``` 通过上述机制,pmap 可帮助开发者诊断内存泄漏、分析进程内存分布等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值