看懂Windows任务管理器--内存篇

windows任务管理器陪伴我们很长时间了,但是你真的看懂他了吗?
//===============================
Xisat@ 2008-03-13 转载请保留作者信息,感谢
//==================================
先来讲讲任务管理器里的内存信息
我们应该常听到大家说自己系统启动内存多少多少,自己优化了多少多少内存
一般都是基于这样的判断


Pf使用率这里是什么含义呢
ms官方的帮助信息是:正被系统使用的页面文件的量。
能看出pf(page file)使用率并不是率,而是一个量,实际上这里使用page file这样一个定义却容易误导用户

误导一: pf使用率==所有进程的内存使用之和


如果有心情,你可以把所有进程的内存使用加起来会发现 总和<pf使用率

误导二: pf使用率=当前页面文件的大小(也就是那个隐藏的pagefile文件)
你可以试试在性能选项里面禁用页面文件,会发现pf使用率并没有随着pagefile文件消失而消失

pf使用率到底是什么,我们再来看看procexp里的内存信息


与pf使用率相同,但这里的名称改为了commit(提交,执行)
明确的表达了pf使用率是提交物理存储器的空间总合
==所有进程的虚拟内存空间+核心内存空间 (pf在这里使用确实有些误导,也有可能ms当时的构思是不区分开物理内存和页面文件,实际使用中virtualalloc提交物理存储器的时候也是不区分这个关系的)


这里有必要说明一下任务管理器里的虚拟内存大小和性能设置里面的虚拟内存不是同一个概念
在procexp里虚拟内存大小表达为Private Byte意思是私有字节


涉及到windows的内存管理,每个进程都有自己的虚拟地址空间,32位进程这个空间的最大值是4GB
任务管理器的这个虚拟内存大小就是为进程保留的私有虚拟地址空间的大小
而性能设置里的虚拟内存是真正意义上的Page file(可能ms为了普通用户更好理解,形象化定义成了虚拟内存)

windows任务管理器陪伴我们很长时间了,但是你真的看懂他了吗?
//===============================
Xisat@ 2008-03-15 转载请保留作者信息
//==================================
继续讲解前,先对上篇的几个概念做些补充


这里的内存使用是什么样的概念呢?和上文提到的虚拟内存大小(private byte)之间又是什么关系呢?
windows任务管理器(WINDOWS TASK MANAGER以下简称TM )的内存使用和procexp explorer(以下简称PE)
中的working set 是同一个概念


working set 在msdn里的解释是:
The working set of a program is a collection of those pages in its virtual address space that
have been recently referenced. It includes both shared and private data. The shared data
includes pages that contain all instructions your application executes, including those in your
DLLs and the system DLLs. As the working set size increases, memory demand increases.
大意为:工作集(working set)是程序在自身虚拟地址空间中最近引用的页面集合。它包括共享和私有数据
。共享数据包括哪些支持执行文件运行的系统dll和私有dll的内存页,内存需求跟随工作集增加而增加。
可以理解为进程提交的虚拟地址空间在物理内存中实际引用的部分,是进程占用内存大小的直接表现.
细心的读者可能会发现,为什么TM中有些进程的 虚拟内存大小比内存使用还要小呢?对这一事实,我还没有
确切的答案,也可以理解为,多余的这部分是某些系统共享dll的页空间比如kernel32.dll user32.dll
ntdll.dll等

另一个补充是关于pf使用率的概念
以下也是msdn上的解释
PF Usage – This is the total number of committed pages on the system.  It does not tell you how
many are actually written to the page file.  It only tells you how much of the page file would
be used if all committed pages had to be written out to the page file at the same time.
pf使用是当前系统所有已提交的页面空间总数,它不反应实际有多少写入页面文件.它仅仅反应假如所有的已提
交页面空间在同一时间写入页面文件可能占用的大小。
实际使用这个值并不一定代表了当前所有进程的物理内存占用,如上文所说,只是所有进程的虚拟地址空间的
总和,具体的物理内存占用或者页面文件的使用要看当前机器的环境和系统分配了。
以上概念性的东西比较多,乍看似乎不那么实用,掌握好的话遇到一些概念性的系统问题有指导作用哦
继续下文

这里是一个比较重要且被忽略的概念
页面错误和页面错误增量


当进程需要访问的某些部分不在缓存内存中(软页错误)也不在内存中(硬页错误)就会触发页面错误。
结果呢?
一般就从硬盘上去找数据了,效率当然低了很多。当物理内存大小不能完全跟上进程数据访问要求的时候,页
面错误就不可避免。但是减少页错误的可能,也是提高应用程序效率的重要部分
页面错误增量可以实时反应出进程的页错误动态,对判断系统性能开销有很重要的参考作用

TM中一些其他的内存信息

物理内存


总数:物理内存总数(你有几根内存?)
可用数:物理内存中还有多少可被提交?
系统缓存:用来缓存内存和硬盘交换的数据
windows缓存机制是windows数据效率交换的重要组成,这里的系统为工作集提供一个备用缓冲列表,提高内存
与其他存储设备的交换效率
ps:大家可能要联想到supercache是怎么工作的呢?是不是提高了这个缓存的大小啊?很抱歉,我还没有研究
过,呵呵,下文吧

认可用量(commit charge)


总数:相当于当前系统的提交的虚拟地址空间总和(这里也包括页面文件),比pf要大些,windows系统占用
限制:可用提交空间的最大值(包括页面文件)
峰值:当前环境历史最大值

核心内存


总数:系统核心驱动提交的空间总数,系统优化时候不要忽略了这个。


分页数:核心可被映射到页面文件的空间
未分页:核心常驻内存的空间

注:TM中的进程信息列可在 查看-选择列中添加

//===============================
Xisat@ 2008-03-15 转载请保留作者信息,感谢
//==================================
概念比较多,看完需要些耐心了。基础扎实些没有坏处的。:)
下篇文章打算讲讲TM中的 cpu核心时间 进程线程,句柄等等概念
饿咯,吃饭去

作者博客原文 http://blog.csdn.net/xisat/archive/2009/02/10/3872836.aspx

from http://hi.baidu.com/ctrlaltz/blog/item/d388ada4813b5ce79052ee88.html

发表评论?

0 条评论。

发表评论