【1】VMMap 查看某个进程的内存使用状态(以及虚拟内存)
转载自官网:https://docs.microsoft.com/en-us/sysinternals/downloads/vmmap
介绍
- VMMap是一个进程虚拟和物理内存分析实用程序。它显示了进程的已落实虚拟内存类型的细目分类,以及操作系统分配给这些类型的物理内存(工作集)的数量。
- 除了内存使用情况的图形表示之外,VMMap还显示摘要信息和详细的进程内存映射。强大的过滤和刷新功能使您能够确定进程内存使用量的来源以及应用程序功能的内存成本。
- 除了用于分析实时过程的灵活视图之外,VMMap还支持多种形式的数据导出,包括保留所有信息的本机格式,以便您可以加载回来。它还包括启用脚本方案的命令行选项。
- 对于希望了解和优化其应用程序的内存资源使用情况的开发人员而言,VMMap是理想的工具。
屏幕截图
名词说明
Committed: 进程向OS宣称要使用的内存大小(在虚拟内存进行了分配),基本上都不等于进程实际使用的物理内存大小。
- 一是其中统计了进程所链接的所有动态库的空间,比如标准C库,而实际上OS在内存中只加载一份C库的代码段,所有进程共享使用。但每个进程在运行时,依然要在自己的虚拟内存空间为C库分配好地址,OS的动态库管理程序会进行映射;
- 二是OS分虚拟内存和物理内存。32位电脑上,每个进程的虚拟内存空间可达4GB。当进程malloc()申请10MB空间时,先在虚拟内存中预留出10MB的地址空间(统计入Committed),但只有在真正读写这10MB空间时,才会通过缺页中断去创建对应的物理内存,并在进程的Total WS(WorkSet)中体现。所以Committed相对于进程实际使用的物理内存都比较大。
Private Bytes:上面的Committed包含了很多共享库的内存,Private Bytes则是属于进程独占的内存。比如一个动态库,虽然代码段是共享的,但数据段是每个进程各自拷贝一份并维护。
Private Bytes依然不完全等于进程使用的物理内存,它是进程独占的虚拟内存大小统计。
Working Set: 进程使用中的物理内存,包含了进程独占的物理内存和可共享的物理内存(主要是共享库所使用的物理内存)。
注意:使用“使用中”,是为了强调进程只是正在使用这块物理内存,但并不代表全部是由进程申请的。
示例解读:
进程虚拟内存已经分配了206,264KB(Committed);
其中属于进程私有的虚拟内存为34,148KB(Private Bytes),两者差值可以粗略认为是各种可共享动态库所占的虚拟内存大小。
进程实际使用中的物理内存是32,540KB(Working Set)。
下图中,Committed、Private、Total WS分别对应于上面的Committed、Private Bytes、Working Set。其中:
Total WS = Private WS + Shareable WS。
Shared WS:表示Shareable WS中已经共享的部分。
Image:进程自身可执行文件以及包含的所有库。虽然这些库的总大小为176,184KB,但很多是共享的,属于进程独占的只有13,184KB。
其他名词解释可见VMMap里面的Help。
对于进程内存优化,大部分时候重点关注Heap行的Total WS使用情况,即进程堆中分配且实际使用的物理内存。
下载与相关链接
下载VMMap (1.3 MB)
现在从Sysinternals Live运行。
运行:
- 客户端:Windows Vista及更高版本。
- 服务器:Windows Server 2008及更高版本。
【2】RAMMap 内存查看
【2.1】英文版
官网:https://docs.microsoft.com/zh-cn/sysinternals/downloads/rammap
最佳实践:
Process Private: 分配给单一Process专用的内存
Mapped File: 用来储放档案内容快取(Cache)的内存空间
Shared Memory: 标注给多个Process共用的内存分页(Page,内存管理单位)
Page Table: 用来描述虚拟内存位址的分页表(裡面是一笔一笔的PTE,Page Table Entries)
Paged Pool: 允许移至硬盘的核心集区内存(Kernal Pool Memory)
Nonpaged Pool: 不允许移至硬盘的核心集区内存
System PTEs: 与I/O空间、核心堆叠、内存描述清单等系统分页相关的PTE
Session Private: 登入工作阶段相关的内存
Metafile: 是系统快取的一部份,包含NTFS Metadata(包含MFT及其他NTFS Metadata档案)。在MFT中,每个档案属性记录佔用1K,而一个档案至少有一个属性记录,再加上其他NTFS Metadata档,当档案数众多,这块会很快速成长。
AWE: 启用Address Windowing Extension技术所使用的相关内存空间(较常应用在SQL或其他DB)
Driver Locked: 驱动程式锁定的实体内存。多用于I/O的暂时性小量应用,如果有装RAMDisk,也会算在这一区。
Kernel Stack: 核心执行绪推叠,执行绪愈多,用量愈大。
每项分类都有以下栏位:
Active: 正在使用中的实体内存分页(Process Working Set或System Working Set)
Standby: 留在实体内存但暂不使用的分页,保留供后续能快速重覆利用
Modified: 与Standy类似,但内容被修改过,重覆使用前要先回写到硬盘机
Modified no write: 与Modified类似,但标注为不需回写到硬盘
Transition: 在分类之间转换的分页
Zeroed: 内容已清空可供使用的分页,系统刚开机时明显增加,随著使用一段时间逐步转为Standby
Free: 可以使用但残留先前资料的分页,使用前需先转为Zeroed
Bad: 标注损坏的内存
【2.2】中文版
中文版参考下载自:http://www.downxia.com/zixun/42021.html
运行RamMap,显示主界面,和“资源监视器”中的内存分析工具差不多,不过显示的信息更为详细。下面一一浏览。
【内存使用计数】
水平图主要是按基本类型活动内存、备用内存等分。
垂直图则按照映射文件、可共享等区分。
【进程统计】
在这里可以看到各个进程的详细使用情况。特别是备用和私有里头的内存分配大小。
【优先级内存摘要】
这里则显示了备用内存中各个优先级的页所占用的空间。
【物理内存】
这里显示了内存的具体使用情况。
【物理范围】
从这里可以看到内存地址的分配。
【文件摘要】
这里显示预加载的文件大概信息,比如缓存大小,正在使用中的大小等。
【文件详细信息】
这里是前面文件摘要的详细信息结果,从这里可以看出每个文件中被加载的大小,类型,是在哪种内存中等等详细信息。
以上就是RamMap的使用指南,希望对你有帮助。