hopeless-dream

导航

pmap内存分析工具

简介

 pmap - report memory map of a process    进程的内存映射报告

语法:

pmap [options] pid [...]

选项

选项 含义
-x 显示扩展的信息
-X 显示比-x更详细的信息。但是会按照文件/proc/PID/smaps改变显示格式(显示的信息是该文件内容的简化)
-XX 显示一切内核提供的信息
-d, --device 以设备格式显示
-q, --quiet 不显示头尾信息
-p, --show-path 在映射中显示路径
-A, --range=<low>[,<high>] 只显示指定范围的地址空间,低地址和高地址分别用low和high指定,以逗号分隔
-h, --help 打印帮助
-V, --version 输出版本信息

使用示例

# pmap -d 537 |less
537:   /usr/sbin/NetworkManager --no-daemon
Address           Kbytes Mode  Offset           Device    Mapping

00007fff8148b000     132 rw--- 0000000000000000 000:00000   [ stack ]
00007fff814fb000       8 r-x-- 0000000000000000 000:00000   [ anon ]
ffffffffff600000       4 r-x-- 0000000000000000 000:00000   [ anon ]
mapped: 478476K    writeable/private: 26940K    shared: 28K

 补充:

什么是虚拟内存?

虚拟内存作为一种逻辑层,处于应用程序的内存请求与硬件内存管理单元(Memory Management Unit,MMU)之间。

虚拟内存的用途和特点:

  1. 若干个进程可以并发地执行
  2. 应用程序所需内存大于可用物理内存时也可以运行
  3. 程序只有部分代码装入内存时进程可以执行它
  4. 允许每个进程访问可用物理内存的子集
  5. 进程可以共享库函数或程序的一个单独内存映像
  6. 程序是可重定位的,也就是说,可以把程序放在物理内存的任何地方
  7. 程序员可以编写与机器无关的代码,可以不关心物理内存的组织结构

虚拟内存子系统的主要成分是虚拟地址空间(virtual addres space)的概念。进程所使用的一组内存地址不同于物理内存地址。当进程使用一个虚拟地址时,内核和MMU协同定位其在内存中的实际物理位置。

现代CPU包含自动把虚拟地址转换成物理地址的硬件电路,为了达到这个目标,把可用RAM划分成长度为4KB或8KB的页框(page frame),引入一组页表来指定虚拟地址和物理地址之间的对应关系。这样一块连续的虚拟地址请求可以通过分配一组非连续的物理地址页框得到满足。

 

posted on 2021-06-04 09:59  hopeless-dream  阅读(648)  评论(0编辑  收藏  举报