在收集某个程序或进程的性能数据时,内存的相关项都是需要重点关注的。
Windows Performance Monitor中有三个内存相关的性能计数器,它们分别是
Private Bytes,
Virtual Bytes,
Working Set。
每个计数器自带的说明是这样的:
Private Bytes指这个处理不能与
其他处理共享的、已分配的当前字节数。
Virtual Bytes指处理使用的虚拟地址空间的以字节数显示的当前大小。使用虚拟地址空间不一定是指对磁盘或主内存页的相应的使用。虚拟空间是有限的,可能会限制处理加载
数据库的能力。
Working Set指这个处理的 Working Set 中的当前字节数。Working Set 是在处理中被线程最近触到的那个内存页集。如果计算机上的可用内存处于阈值以上,即使页不在使用中,也会留在一个处理的 Working Set中。当可用内存降到阈值以下,将从 Working Set 中删除页。如果需要页时,它会在离开主内存前软故障返回到 Working Set 中。
也不知道是不是由于本地化时翻译得不够精准,我总觉得上面这些中文完全没有讲到点子上,没有非常深入了解
操作系统知识的话还是会看不明白。不过可以对照一下下面的解释:
Private Bytes该计数器记录了当前通过VirtualAlloc API Commit的Memory数量。无论是直接调用API申请的内存,还是被Heap Manager申请的内存,或者是CLR 的managed heap,都算在里面。跟Handle Count一样,如果在整个程序周期内总体趋势是连续向上,说明有Memory Leak。
Virtual Bytes该计数器记录了当前进程申请成功的用户态总内存地址,包括DLL/EXE占用的地址和通过VirtualAlloc API Reserve的Memory Space数量,所以该计数器应该总大于Private Bytes。一般来说,Virtual Bytes跟Private Bytes的变化大致一致。由于内存分片的存在,Virtual Bytes跟Private Byes一般保持一个相对稳定的比例关系。当Virtual Bytes跟Private Bytes的比例关系大于2的时候,程序往往有比较严重的内存地址分片。
Working SetThe working set of a process is the set of memory pages currently visible to the process in physical RAM. 进程的
工作集是该进程可见的在物理内存中的内存分页集合。
以上的说明还是比较好理解的。配合Process Explorer工具和任务管理器,可以了解到
Private Bytes对应着任务管理器中的“虚拟内存大小”一项,
Working Set对应着“内存使用”一项。因此,用这两个计数器来反映进程或程序的内存性能基本已经能够满足需要。