扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2071|回复: 0

[Windows] 任务管理器中内存使用率和进程使用不符

[复制链接]
发表于 2018-6-12 14:49:15 | 显示全部楼层 |阅读模式

访客您好,登录后可看更多精彩内容!发帖、回复积分还可换实物奖品哦,还在犹豫什么,赶紧注册登录吧!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 bijiafeng 于 2018-6-12 14:52 编辑

最近的一个项目中遇到任务管理器中内存使用率和进程实际内存使用不符的情况,任务管理器中内存使用率远大于实际进程占用的内存。
各种学习后发现这是个挺有趣的事情,实际上我们看到的进程所使用的内存是内存(专用工作集),而那个内存使用率是实际物理内存使用情况,所以就出现了不相符的情况。

解释一些名词(摘自网络):
0.png

工作设置(内存)/Working Set/Total WS: 专用(私有)工作集(当前进程独占)中的物理内存数量与进程正在使用且可以和其他进程共享的物理内存数量的总和,因此可以这么理解,该值就是该进程所占用的总的物理内存,但是这个值是由两部分组成,即"专用工作集"和"共享工作集"(Win10的任务管理器里面可以看到共享工作集)。在深入解析Windows操作系统里面是这样描述的:物理上驻留在内存中的那一部分子集称为工作集(Working Set)。
峰值工作设置(内存): 进程的工作设置(内存)的最值,可以这么理解,因为工作设置(内存)是波动的,这个项专门记录最大的那个值。
内存(专用工作集)/WS Private/ Private WS: 工作集的子集,它专门描述某个进程正在使用且无法与其他进程共享的物理内存值。这个值对于一个进程来说也是最重要的,它代表了一个进程到底独占了多少物理内存。
内存(共享工作集)/ WS Shareable/ Shareable WS: 进程和可以和别的进程共享的物理内存值(注意:是可以共享的,不一定共享了)。比较常见的,譬如,加载系统的一些DLL所占用的物理内存,文件共享内存(文件映射),命名共享内存等等。
WS Shared/ Shared WS: WS Shareable的子集,这部分是表示已经和别的进程共享的物理内存。
提交大小/ Private Bytes/ Private: 给当前进程使用而保留的私有虚拟内存的数量,从名字里面的Private可以看出它是专有的,但是和上面的WS Private的区别在于,WS Private是纯物理内存,而Private Bytes实际上是虚拟内存的概念,是包含WS Private的,另外一部分是在换页文件(被从物理内存里面换出去了)里面,有些内存,虽然你提交,但是如果一直没有使用,也是在页面文件(换页文件:PageFile)里面。另外,多说一句,如果要查内存泄漏,可以关注这个值。
Virtrual Size/Size: 当前进程使用的所有的虚拟内存空间,包含共享,非共享,物理,页面,甚至为程序保留但还未分配的内存。
Committed: Virtual Size减去为程序保留的内存(未分配)。怎么理解为程序保留的但未分配的内存?就是告诉系统我要一块内存,但暂时还用不上,不过分配的地址得给我,系统就给程序一个不用的地址,但不分配内存,等程序真的要使用时(读写),就从页面或物理内存中分配出来映射到那个地址上。
保留(预定)的内存: 将虚拟内存空间中线性地址0xXXXXXXXX-0xYYYYYYYY标记为预定状态,但是并没有分配实际的内存。这样的好处是我先预定一部分线性地址,以免后面进程空间中没有这么大的地址范围可用(一般来讲只有服务器上面这样用得多)。这样预定后,0xXXXXXXXX-0xYYYYYYYY这块地址就被占用,地址空间也是资源,虽然还没有分配任何内存。
提交的内存: 系统从物理内存或者换页内存分配给进程的那一部分。这部分内存在虚拟内存的线性地址中是连续的,不过在物理内存或者换页内存中,不一定是连续的。提交但未使用的内存一般都在换页内存里面,只有去使用的时候,才会换到物理内存里面,这点要注意。
换页内存: 也属于已经提交的内存,不过因为不常用,可能被系统置换到磁盘上面以节省物理内存,后面如果要使用会发生换页错误(缺页中断),再从磁盘上面置换到物理内存。
缺页中断: 当程序要访问某个地址,系统发现这个地址不在物理内存里,就会产生中断,然后去读取页面文件,把页面文件中与内存相关的数据拷贝到物理内存,然后标记一下这个地址已经在物理内存中了,然后继续让程序运行。
虚拟内存、物理内存和换页内存: (整个概念还是有一些复杂,这里只简单描述一下)虚拟内存一般是指整个进程用到的(虚拟)地址空间,之所以是虚拟的,因为中间被系统内存管理器抽象了一层,说到这里就牵涉到一个进程的虚拟内存空间的问题,win32下面一般应用层的虚拟地址空间是2G,然后从虚拟内存地址到物理内存有一个映射关系,这个映射是由内存管理器来完成的,对应用程序透明。而虚拟内存里面一般分成保留内存(压根就还没分配的,只是占了地址空间的坑),物理内存(正在使用)和换页内存(从物理内存换出去的,或者分配后一直未使用),另外物理内存和换页内存都属于已经提交的内存。
分页池: 由内核或驱动程序代表进程分配的可分页内核内存的数量。可分页内存是可以写入其他存储媒介(例如硬盘)的内存。
非分页缓冲池: 由内核或驱动程序代表进程分配的不可分页的内核内存的数量。不可分页的内存是不能写入其他存储媒介的内存。内核在处理低优先级的中断时,仍可以发生(处理)高优先级的中断,反过来则不行。缺页过程也是一个中断过程(缺页中断),那么就遇到了一个问题,即缺页中断和其他中断的优先级的问题。如果在高于缺页中断的中断优先级上再发生缺页中断,内核就会崩溃。所以在DISPATCH_LEVEL级别以上,绝对不能使用分页内存,一旦使用分页内存,就有发生缺页中断的可能,如果发生就会导致内核崩溃(蓝屏)。

下文摘自微软技术论坛:
任务管理器里的进程内存(默认不添加其他几个内存columns的话),那个仅指Working Set(Private Bytes),不含Shared Memory/Mapped File等,更不包含Kernel Mode的内存堆(NonPaged/Paged Pool)等等等等。。。
不过"性能"下面的内存Available倒是准确的数值,能反映你物理内存有多少是可用的
所以,你要精确地去看内存,必须使用VMMap以及Rammap这种终极工具。
我上这个图,你应该就能理解了,这里Total是被"性能"标签统计的,Private是"进程"标签统计的,而从总体物理内存使用角度看,应当以Total计算
1.png
Rammap彻底解释任务管理器的进程(专用工作集)总和为什么小于"性能"下的值
2.png


参考文档:

1、https://www.cnblogs.com/walfud/articles/3256233.html Windows 任务管理器中的几个内存概念

2、https://www.zhihu.com/question/19858114 Windows 7 里进程管理器里面的各列是什么含义?主要是和内存有关的内存-专用工作集,内存-工作集,内存-提交大小,这些之间有什么区别?

3、https://www.cnblogs.com/awpatp/archive/2012/09/17/2688315.html Windows内存的一些知识点

4、http://shashanzhao.com/archives/832.html windows任务管理器中的工作设置内存,内存专用工作集,提交大小详解

5、https://superuser.com/questions/ ... gest-user-of-my-ram Process Explorer not showing the biggest user of my RAM VMMAP显示和process explorer不一样?

6、http://www.cnblogs.com/georgepei/archive/2012/03/07/2383548.html 内存详解

7、http://www.cnblogs.com/georgepei/archive/2012/03/07/2383445.html 你真的懂任务管理器中有关内存的参数Private(提交大小)和working set(工作设置)吗?

8、http://blog.csdn.net/lantianjialiang/article/details/5620647 process explorer中的visual size vs working set; private bytes vs WS private

9、http://www.cnblogs.com/awpatp/archive/2010/01/26/1656651.html Task Manager跟Performance Monitor的区别(Working set和Private bytes)

10、https://social.microsoft.com/For ... 0a049?prof=required 为什么任务管理器里面所有进程占用的内存加起来远远小于内存使用量?

11、https://blogs.technet.microsoft. ... ows-virtual-memory/ Pushing the Limits of Windows: Virtual Memory

毕嘉峰电脑技术论坛-Bijiafeng.com:论技术分享我们更专业更精确!!
关闭

站长推荐 上一条 /1 下一条

9.9全场包邮
客服热线
暂缓开通 周一至周五:09:00 - 18:00
公司地址:北京市海淀区中关科技园
邮箱:root@bijiafeng.com

毕嘉峰电脑技术论坛始于2008年,由毕嘉峰创办并延续至今,在2012年进行线下转型于2013年正式上线运行。我们坚持初心不忘使命,努力为客户打造准确精准的解决方案,目前处于公益运行,如果你喜欢本站,希望给予赞助让我们做得更好更久,谢谢支持!。

Powered by Discuz!  X3.4 © 2008-2020 毕嘉峰电脑技术论坛   技术支持: 凡尘

申请友链|小黑屋|毕嘉峰电脑技术论坛 ( 京ICP备13033230号-2 )|赞助我们 |

GMT+8, 2020-10-30 03:55 , Processed in 0.020412 second(s), 38 queries .

快速回复 返回顶部 返回列表