【原创】Windows系统内存计数器理解解析
上一篇 / 下一篇 2008-05-13 11:42:23 / 个人分类:操作系统
说明:本文的计数器以Windows2003为准。51Testing软件测试网oi*~.\ k1ynH
51Testing软件测试网lh TO}Zn4g序言51Testing软件测试网q8j*W$iX6od
内存的使用情况是系统性能中重要的因素之一,频繁的页交换及内存泄露都会影响到系统的性能。本文主要是描述内存的一些概念、计数器含义,以及可能存在的性能瓶颈。
l/a7fm.du0
g V.UK0Gwk0一些概念
K2z,r }3rS051Testing软件测试网{u};mF?b;c
① “页交换”是使用称为“页面”的单位,将固定大小的代码和数据块从 RAM 移动到磁盘的过程,其目的是为了释放内存空间。51Testing软件测试网K~/u1[lW2YZ
W%ia
② 每个Windows进程都拥有4G的虚拟地址空间,在多任务环境下,所有进程使用的内存总和可以超过物理内存。
{%R f3ap|b GzU0③ 进程的一部分可能会从物理内存中删除而被暂存在硬盘的文件里(pagefile)。当进程试图访问这些被交换到pagefile里的内存的时候,系统会产生一个缺页中断(page fault),这时候Windows内存管理器会负责把对应的内存页重新从硬盘调入物理内存。
I"tU0IR0④ 用于描述物理内存中虚拟页面子集的术语称为一个工作集(Working Set),也叫驻留集。一共有三种工作集:进程工作集、系统工作集、会话工作集。(具体概念看后面的计数器)51Testing软件测试网.F
`8U V_9Abn~
⑤ 非换页池:它是由一些“可保证总是驻留在物理内存中”的虚拟地址范围构成的,由于这些地址范围总是驻留在内存中,因此任何时候都可以访问它们,而不会招致页面错误。51Testing软件测试网5t;],b3kwj
⑥ 换页池:系统空间中的一段虚拟内存区域,它可以被换入和换出系统。这两种内存池都位于系统地址空间部分,并且被映射到每个进程的虚拟地址空间中。51Testing软件测试网 p*bdGk
⑦ 共享内存:对于多个进程可见的内存,或者出现在多个进程虚拟地址空间中的内存。例如:如果两个进程使用了同样的DLL,那么只需将引用该DLL的代码页面加载到物理内存一次,然后所有映射了该DLL的进程之间共享这些页面。
!idyP;X)r-J@0⑧ MDL(Memory Descrīptor List)是一个结构体,用于描述一片内存区域中的所有物理内存页。51Testing软件测试网4arJM"Kn+Y
51Testing软件测试网rWU_0of`{m
可能存在的性能问题
#e&m(n+k~C0
+r*AJ;l+jFr:yS01、Memory\\Page Reads/sec过高,持续大于5。51Testing软件测试网Zh DR2doxG x"h
过多的页交换要使用大量的硬盘空间,很容易将导致将页交换内存不足与导致页交换的磁盘瓶径混淆。这就需要我们在研究内存不足不太明显的页交换的原因时,必须跟踪如下的磁盘使用情况计数器和内存计数器:Physical Disk\\ % Disk Time、Physical Disk\\ Avg.Disk Queue Length、Memory\\Page Reads/sec
1u:L?h8T]-C!k%j0 ①如果Memory\\Page Reads/sec比较低,但Physical Disk\\% Disk Time and Physical Disk\\Avg. Disk Queue Length计数器很高,表明磁盘有瓶颈。
O`:N%D.{:a^0 ②如果随着Physical Disk\\Avg. Disk Queue Length的增加,而Memory\Page Reads/sec并没有减少,表明有内存的瓶颈。
.{~-kr6D:Wi!c{{`U051Testing软件测试网b @ Xa:a7i
m SD
2、内存泄露51Testing软件测试网5eLIk+@
]G|A
如果怀疑内存泄露,监视 Memory\\ Available Bytes 和 Memory\\ Committed Bytes,以观察内存行为,并监视可能存在泄露内存的进程的 Process\\Private Bytes、Process\\Working Set和Process\\Handle Count(Handle泄漏)。51Testing软件测试网e"]7p2m
Ny*oP0B
如果怀疑是内核模式进程导致了泄露,则还应该监视 Memory\\Pool Paged Bytes、Process\\ Pool Paged Bytes。(Memory\\Pool Paged Bytes与Process\\ Pool Nonpaged Bytes,有什么不同,期待告知)。51Testing软件测试网,Teb ?#mb6al5B
可以通过PoolMon工具详细查看非换页池和换页池的详细使用情况。
cT2~}bH2vH,P0 备注:这里只是随便提一下。51Testing软件测试网Ew_ t9['d~#Y |
bl*wp1|_%[J9~0各计数器理解及描述
+Kp'h%hbAc051Testing软件测试网,o
ZA|P Q
f8\)t
1、Process\\Working Set
U*B'FIOI;H"m0含义:
Pb
[p^N8a-L0进程工作集,是虚拟地址空间在物理内存中的那部分。包含了一个进程内的各个线程引用过的页面,即:Task Manager中的Mem Usage。51Testing软件测试网N5FLX$`.X#E
IW+L
分析:51Testing软件测试网{#cH9U(_m'yk
由于每个进程工作集中包含了共享页面,所以Process\\Working Set(_Total)值会大于实际的总进程内存使用量。51Testing软件测试网-EuM,Q
~z;U_6Z
.Nl u[HV\?6w_02、Process\\Private Bytes
E[Hm,iR0含义:51Testing软件测试网(Sh
PC@/\b$UA
分配的私有虚拟内存总数,即私有的、已提交的虚拟内存使用量。即:Task Manager中的VM Size。51Testing软件测试网E ZN}^*aln]k
分析:51Testing软件测试网:TU%HYj,GUcI
内存泄露时表现的现象是私有虚拟内存的递增,而不是工作集大小的递增。在某个点上,内存管理器会阻止一个进程继续增加物理内存大小,但它可以继续增大它的虚拟内存大小。51Testing软件测试网wTD&t
\?C
51Testing软件测试网;I `a n"t4k^!py
3、Memory\\Available MBytes (Available Bytes、Available KBytes)
9IdP(q8_JL0含义:51Testing软件测试网G9r&Hve
Available MBytes 是指以 MB 表示的可用物理内存量,此内存能立刻分配给一个进程或系统使用。它是空闲列表、零列表和备用列表的大小总和。51Testing软件测试网8T-a'M,p'n;u,c
C'G.^
分析:
hXR|Jle3F0O0至少要有10% 的物理内存值,最低限度是4 MB。
|Oep#]#O C y;?^G4S0页面状态:
X$],t
[#]Pf0备用:页面原先属于某个工作集,但现在被去除了。该页面自从最后一次被写到磁盘后一直未被修改过,PTE(Page Table Entry)仍然指向该物理页面,不过已标记为无效的和正在转移中。51Testing软件测试网[9sSl(kWL FM
空闲:页面是空闲的,但它包含了未特别指明的脏数据。(需要用零初始化,否则不能交给用户进程)51Testing软件测试网d!Q%V)Y/v
零化:页面是空闲的,并且已经被零页面线程初始化为零了。
/o[8m#Hxu[e0
qVx?tzQ,XH04、Memory\\Page Faults/sec
'FB-eJ0Hqw8_H0含义:51Testing软件测试网4|-v[H2[
g
Page Faults/sec 是每秒钟出错页面的平均数量。由于每个错误操作中只有一个页面出错,计算单位为每秒出错页面数量,因此这也等于页面错误操作的数量。这个计数器包括硬错误(那些需要磁盘访问的)和软错误(在物理内存的其他地方找到的错误页)。许多处理器可以在有大量软错误的情况下继续操作。但是,硬错误可以导致明显的拖延,因为需要访问磁盘。51Testing软件测试网)H2bFvi1h.S\
51Testing软件测试网VS}~\2~
5、Memory\\Page Reads/sec51Testing软件测试网1nD3vYXXW^
含义:51Testing软件测试网XQ0M(F1c7r:D
Page Reads/sec 是读取磁盘以解析硬页面错误的次数。它显示读取操作的数量,它并不考虑每个操作的页面数量。当一个进程引用一个虚拟内存的页面,而此虚拟内存位于工作集以外或物理内存的其他位置,并且此页面必须从磁盘检索时,就会发生硬页面错误。此计数器是引起系统范围内延迟的主要指示器。它包含读取操作以满足文件系统缓存(通常由应用程序请求)和非缓存映射内存文件的错误。比较内存的值\\PagesReads/sec 与内存的值\\PagesInput/sec 来决定每个操作取读的平均页面数量。
;y-].Y-D5~#Q%E/Z0通俗含义:
W cp!?%w3YK0页的硬故障,Page/sec的子集,是为了解决硬错误,从硬盘读取的次数。51Testing软件测试网E`
Rq;jl$iC
分析:
w(k~8E%Cn$H)^[0阈值为>5,越低越好。大数值表示磁盘读而不是缓存读。持续大于5的值,表明内存的读请求发生了较多的缺页中断(page fault)。51Testing软件测试网B'm"S7nj7B
说明进程的Working Set已经不够,使用硬盘来虚拟内存。此处为读得次数,不关心读取得页数,比较大的值表明内存出现了瓶颈。
-y-y6i0{P O9w
A)j!l051Testing软件测试网/F7L9fhlf
6、Memory\\Page Writes/sec51Testing软件测试网tWJZ+\$D o
含义:51Testing软件测试网l
h
i9_ g
Page Writes/sec 是指为了释放物理内存空间而将页面写入磁盘的速度。只有页面还在物理内存中时所做的更改才会写入磁盘,因此这些页面可能只保留数据而不保留代码。这个计数器显示写入操作,不计数每个操作中写入的页数。51Testing软件测试网9WZBLsh^7r
51Testing软件测试网lR%v-i%|:\7k
7、Memory\\Pages Input/sec51Testing软件测试网4^P*T
yb
含义:51Testing软件测试网7Ts/{s%w
Pages Input/sec 是以解析硬页面错误从磁盘读取的页数。当一个进程引用一个虚拟内存的页面,而此虚拟内存位于工作集以外或物理内存的其他位置,并且此页面必须从磁盘检索时,就会发生硬页面错误。当夜面发生错误时,系统尝试将多个连续页面读入内存以充分利用取读操作的优点。请比较 Memory\\Pages Input/sec 的值和 Memory\\Page Reads/sec 的值以便决定每个取读操作读入内存的平均页面数量。
_e5N,hD"J8I%P051Testing软件测试网mH0[M!\/K3\{R(c
8、Memory\\Pages Output/sec51Testing软件测试网`kWoU
含义:51Testing软件测试网M:DWE0_zFM
Pages Output/sec 是指为了释放物理内存空间而将页面写入磁盘的页数。只有在物理内存中更改时页面才会写回到磁盘上,因此页面可能只保留数据而不是代码。高速的页面输出可能表示内存不足。当物理内存不足时,Windows 会将页面写回到磁盘以便释放空间。51Testing软件测试网cJ'SfJy"dm
51Testing软件测试网7V2a+DLk#c[H
9、Memory\\Page/sec51Testing软件测试网 d D BUWC:L.D
含义:51Testing软件测试网ex7K&A-OT!d
Pages/sec 是指为解决硬页错误从磁盘读取或写入磁盘的页数。这个计数器是可以显示导致系统范围延缓类型错误的主要指示器。它是 Memory\\Pages Input/sec 和 Memory\\Pages Output/sec 的总和。是用页数计算的,以便在不用做转换的情况下就可以同其他页计数如: Memory\\Page Faults/sec 做比较,这个值包括为满足错误而在文件系统缓存(通常由应用程序请求)的非缓存映射内存文件中检索的页。
7|E0e@b9hU:s0分析:51Testing软件测试网\*Li&rk|
一般如果pages/sec持续高于几百,那么您应该进一步研究页交换活动。有可能需要增加内存,以减少换页的需求(你可以把这个数字乘以4k就得到由此引起的硬盘数据流量) 。Pages/sec 的值很大不一定表明内存有问题,而可能是运行使用内存映射文件的程序所致。51Testing软件测试网)T?d!P,I
51Testing软件测试网m'wO S"sy~8l
10、Memory\\ % Committed Bytes In Use51Testing软件测试网M
mWA/g
C'V
含义:
l+`Y\\F rM.UH8l(|0%Committed Bytes In Use 是 Memory\\Committed Bytes 与 Memory\\Commit Limit 之间的比值。Committed memory是已在页面文件中保留空间的在用物理内存。Commit Limit 是由页面文件的大小而决定的。如果扩大了页面文件,该比例就会减小。51Testing软件测试网'~&Ps.Fc2h
h
C\ Ri}
][0※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※51Testing软件测试网L5amedf+En
u5IG,}1G\\ M011、Memory\\ Committed Bytes51Testing软件测试网&\4uZ{9n4h,O
含义:51Testing软件测试网-o3nwOf
T
Committed Bytes 是指已被提交的(不是保留的)虚拟内存字节数。此数并不一定代表页面文件的使用量,因为它包含了物理内存中从未被换出过的私有提交页面。当然,如果一个进程完全是非驻留的,则它代表所使用的页面文件数量。
2dk*{kg;_4Q0对应Task Manager的PF使用 (Current Commit Charge) 。页面文件的使用量参见计数器:Paging File\\%Usage。51Testing软件测试网9n m$KJ-S:`U2x
原文:51Testing软件测试网0nP1SJ6F
Number of bytes of virtual (not reserved) memory that has been committed. This number doesn’t necessarily represent page file usage because it includes private committed pages in physical memory that have never been paged out. Rather, it represents the amount of page file space that would be used if the process was completely made nonresident.51Testing软件测试网"C`m0cWv'fY
B
分析:
,OE w7aq
R7E-l0NT的内存分配采用了两步走的方法,首先,在虚地址空间上保留一段空间,这时操作系统并没有分配物理内存,只是保留了一段地址。然后,再提交这段空间,这时操作系统才会分配物理内存。51Testing软件测试网jd:H(p1o,~(K
O
Windows的地址空间有三种状态。一种是COMMITED,表明该地址空间已和一块内存相联系;一种是RESERVED,表明该地址空间虽未与一块内存相联系但今后可能会用到,需要保留;一种是FREE,表明该地址空间与内存没有联系。51Testing软件测试网&m