日期:2014-05-17  浏览次数:20751 次

Windows系统内存计数器理解解析

?

序言
内存的使用情况是系统性能中重要的因素之一,频繁的页交换及内存泄露都会影响到系统的性能。本文主要是描述内存的一些概念、计数器含义,以及可能存在的性能瓶颈。

一些概念

① “页交换”是使用称为“页面”的单位,将固定大小的代码和数据块从 RAM 移动到磁盘的过程,其目的是为了释放内存空间。
② 每个Windows进程都拥有4G的虚拟地址空间,在多任务环境下,所有进程使用的内存总和可以超过物理内存。
③ 进程的一部分可能会从物理内存中删除而被暂存在硬盘的文件里(pagefile)。当进程试图访问这些被交换到pagefile里的内存的时候,系统会产生一个缺页中断(page fault),这时候Windows内存管理器会负责把对应的内存页重新从硬盘调入物理内存。
④ 用于描述物理内存中虚拟页面子集的术语称为一个工作集(Working Set),也叫驻留集。一共有三种工作集:进程工作集、系统工作集、会话工作集。(具体概念看后面的计数器)
⑤ 非换页池:它是由一些“可保证总是驻留在物理内存中”的虚拟地址范围构成的,由于这些地址范围总是驻留在内存中,因此任何时候都可以访问它们,而不会招致页面错误。
⑥ 换页池:系统空间中的一段虚拟内存区域,它可以被换入和换出系统。这两种内存池都位于系统地址空间部分,并且被映射到每个进程的虚拟地址空间中。
⑦?共享内存:对于多个进程可见的内存,或者出现在多个进程虚拟地址空间中的内存。例如:如果两个进程使用了同样的DLL,那么只需将引用该DLL的代码页面加载到物理内存一次,然后所有映射了该DLL的进程之间共享这些页面。
⑧ MDL(Memory Descrīptor List)是一个结构体,用于描述一片内存区域中的所有物理内存页。

可能存在的性能问题

1、Memory\\Page Reads/sec过高,持续大于5。
?
过多的页交换要使用大量的硬盘空间,很容易将导致将页交换内存不足与导致页交换的磁盘瓶径混淆。这就需要我们在研究内存不足不太明显的页交换的原因时,必须跟踪如下的磁盘使用情况计数器和内存计数器:Physical Disk\\ % Disk Time、Physical Disk\\ Avg.Disk Queue Length、Memory\\Page Reads/sec
? ①如果Memory\\Page Reads/sec比较低,但Physical Disk\\% Disk Time and Physical Disk\\Avg. Disk Queue Length计数器很高,表明磁盘有瓶颈。
? ②如果随着Physical Disk\\Avg. Disk Queue Length的增加,而Memory\Page Reads/sec并没有减少,表明有内存的瓶颈。

2、内存泄露
? 如果怀疑内存泄露,监视 Memory\\ Available Bytes 和 Memory\\ Committed Bytes,以观察内存行为,并监视可能存在泄露内存的进程的 Process\\Private Bytes、Process\\Working Set和Process\\Handle Count(Handle泄漏)。
? 如果怀疑是内核模式进程导致了泄露,则还应该监视 Memory\\Pool Paged Bytes、Process\\ Pool Paged Bytes。(Memory\\Pool Paged Bytes与Process\\ Pool Nonpaged Bytes,有什么不同,期待告知)。
? 可以通过PoolMon工具详细查看非换页池和换页池的详细使用情况。
?备注:这里只是随便提一下。

各计数器理解及描述

1、Process\\Working Set