工作集和提交大小有什么区别?

在debuggingOOM错误时,工作集和提交大小有什么区别? 特别是提交大小的确切含义是什么?

Solutions Collecting From Web of "工作集和提交大小有什么区别?"

从这里开始 ,工作集是:

物理内存(RAM)的计数,而不是虚拟地址空间。 它代表了进程虚拟地址空间的有效部分,这意味着它可以在不引发页面错误的情况下被引用。

提交大小是:

除页面文件以外没有分配后备存储的可分页虚拟地址空间总量。 在带有页面文件的系统上,它可能被认为是最大的潜在页面文件使用率。 在没有页面文件的系统上,它仍然被计数,但是所有这样的虚拟地址空间必须始终保留在物理内存(RAM)中。

所以你可以把工作集想象成所使用的物理内存的数量,而提交的大小则表示所使用的虚拟内存的数量(像dll或内存映射文件那样的东西,可以通过除了页面文件以外的其他文件)。

也就是说,在.NET中查找“内存泄漏”时,这些数字通常不是很有用。 相反,您应该使用第三方内存分析器 。

提交的内存或提交费用是CPU分配,使用或正在运行应用程序和操作系统的所有RAM。

这是一个总的平台负载,反映真正的内存使用 – 或页面文件来玩时缺乏内存。 该提交限制等于安装的RAM(较少的硬件保留)或内存+页面文件应该是自我解释当考虑上述:)

工作集 不是一个内存使用的措施。

工作集是RAM 数据的优先级,不能被释放以减轻内存压力。

进程的工作集由OS内存管理器(Balance Manager)动态分配。

https://msdn.microsoft.com/en-us/library/bb742613.aspx

Windows系统性能调整

允许32位进程的最低WS为4GB,对于64位进程为8GB。 这只是应用程序保证的最小内存量,实际使用量通常会更大。

64位硬件上的32位应用程序尤其如此。 超过4GB的任何内容都不会反映在工作集中,因为它在备用列表中。

比如Fallout New Vegas(一个32位应用程序)和一大堆mod可以吃9GB的RAM,5GB将会在待机列表中。

通过第三方工具(如Systernals)很容易验证哪些数据位于RAM中。

注意: 高速缓存数据不计入Commit Limit(通常从HDD打开的文件)。

首先刷新缓存和待机,重新恢复内存压力。 这两个选项都不是很理想。 最好有更多的RAM比没有可用内存。 这就是RAM的目的 – 缓存数据。

提交费用也是衡量特定机器的最低RAM要求的一个好方法。如果Commit高于RAM,则PF开启,但差异需要多少内存。

IBM将提交的内存描述为消耗的系统内存

https://www.ibm.com/support/knowledgecenter/en/SSEPGG_9.7.0/com.ibm.db2.luw.qb.server.doc/doc/c0057140.html

Windows Internals将“提交页面”描述为最终转换为物理内存的页面

Microsoft Windows Internals第6版第10章:内存管理 195页)

AMD将Commit定义为不可撤销地将完整的指令写入物理内存

(http:/ developer.amd.com/wordpress/media/2012/10/24593_APM_v21.pdf)

所有在操作系统环境中组合的内存和页面文件是虚拟内存。

每个虚拟地址都应该转换为物理存储。 如果没有,可能会发生错误(空指针等)。

“进程工作集”就是进程所知道的RAM。

Section对象是CPU可以查看的总物理存储空间。 无论是内存还是硬盘都不重要。 在32位硬件上,一个对象是4GB。 在64位硬件上它是256TB。
“段”定义了一个虚拟缓存,“工作集”定义了缓存水平。

https:// i.stack.imgur.com/9rZEW.jpg


注意:在讨论内存限制时,**** Technet / MSDN博客将节对象称为“后备存储”或“页面文件备份节”。

“一般”(P)这些博客是在近10年前发表的。 (当英特尔试图推动AMD进入市场的时候,微软在宣传x64的时候瘫痪了XP / Vista 32,许多人都知道这个历史(:P)。

x86-32包括IA-32和K7,现在都是恐龙。

AMD64抵达K8。 带有C2D的Intel64。


英特尔声明一个Committed指令可以被回滚和推迟。 我会认为回滚是由于HT和延期手段推迟,直到交换文件可以释放内存(将看看)。 英特尔®64和IA-32架构软件开发人员手册卷3B:系统编程指南,第217-10部分

工程师有时会将提交费用称为“系统工作集”或“CPU工作集”。

系统工作集和任务管理器报告。

https://msdn.microsoft.com/en-us/library/bb742613.aspx

由CPU引用的RAM中的页面不应刷新到磁盘上,因为CPU总是有机会再次引用这些页面,而RAM则是缓存。 系统工程师或处理服务器的人将已经意识到这一点。

从理论上讲,64bit的硬件上可以使用128TB -256TB。 如果一个32位的进程达到了4GB的限制,那么CPU指向RAM中的另一个虚拟段(远指针),并保持卡车运行。

没有什么改变,至少在硬件方面没有改变。

这是32位API有缺陷的地方。 即使在没有页面文件存在的情况下,由32位进程引用的页面,但在4GB以外的工作集被假定为在页面文件上。

页面被添加到待机或缓存作为内存映射文件(这可以看到与RAMMap)。