Windows进程内存使用分析 --- VMMap工具使用

VMMap下载地址:https://docs.microsoft.com/en-us/sysinternals/downloads/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)。

Windows进程内存使用分析 --- VMMap工具使用_第1张图片

 

下图中,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使用情况,即进程堆中分配且实际使用的物理内存。

Windows进程内存使用分析 --- VMMap工具使用_第2张图片 

 

你可能感兴趣的:(Windows)