进程管理器:Commit History图表显示了什么?

18
进程资源管理器(Process Explorer)中的内存(Memory)图表中,顶部的图表显示提交历史(Commit History)。这实际上在操作系统(OS)层面表示什么?
为了验证这是否是一个进程在堆(heap)上分配的内存,我编写了一个小程序,多次增量malloc 100MB内存。提交历史图表会一段时间内增加(高达1.7GB的内存分配),而之后即使程序继续malloc内存,它也不再增长。
那么,这个图表究竟表示什么?如何利用这些信息来理解/分析Windows的状态?
1个回答

27

提交级别是分配给系统中所有进程的匿名虚拟地址空间的数量(不包括任何文件支持的虚拟地址空间,例如从映射文件中)。在进程资源管理器中,“提交历史记录”图显示了此值随时间的大小变化。

由于虚拟内存的分配和分配方式(实际支持虚拟地址空间页的 RAM 不必立即分配),因此当前的“提交”级别代表系统可能需要提供的内存最差情况(当前)。与 Linux 不同,Windows 不会分配无法提供或伪造(通过分页文件)的 RAM 承诺(地址空间)。因此,一旦提交级别达到系统限制(大致为 RAM + 分页文件大小),新地址空间分配将失败(但现有虚拟地址空间区域的新用途将不会失败)。

以下是您可以从此值中得出的关于系统的一些结论:

  • 如果此值小于当前 RAM 的使用量(不包括内核和系统开销),则您的系统很可能不会交换(使用分页文件),因为在最坏的情况下,所有内容都应该能够放入内存中。
  • 如果此值比物理内存使用量大得多,则某些程序正在分配大量虚拟地址空间,但尚未使用它。
  • 退出应用程序将减少已提交的内存使用量,因为其所有虚拟地址空间将被清理。

您的实验验证了这一点。我猜测您遇到了地址空间限制(Windows 中的 32 位进程 仅限于 2GB ……也许有 300MB 消失在碎片、库和文本中?)。


2
当您说“如果该值远大于物理内存使用量,则表示某些程序正在分配大量虚拟地址空间,但尚未使用它。”时,有没有办法分离出分配所有虚拟地址空间的程序?在我的情况下,我有8 GB的RAM,但是我看到系统已经使用了12.2GB并且物理内存使用了6.4 GB。我的计算机变慢了,但是当我查看进程资源管理器时,几乎没有I/O(磁盘上没有任何东西在转动),也很少或根本没有CPU使用率,这让我认为这是一个RAM可用性问题。 - Chris Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接