Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows Process Explorer:提交历史记录图显示什么?_Windows_Memory Management_Process Explorer - Fatal编程技术网

Windows Process Explorer:提交历史记录图显示什么?

Windows Process Explorer:提交历史记录图显示什么?,windows,memory-management,process-explorer,Windows,Memory Management,Process Explorer,在Process Explorer中可用的内存图表中,顶部的图表显示提交历史记录。这在操作系统级别上实际表明了什么 为了测试这是否是进程在堆上分配的内存,我编写了一个小程序,多次递增malloc 100 MB。提交历史图增长了一段时间(高达1.7GB的内存分配),此后没有增长,尽管程序在内存上进行了malloc操作 那么,这张图显示的是什么?如何使用此信息了解/分析Windows的状态?提交级别是分配给系统中所有进程的匿名虚拟地址空间量。(它不包括任何文件支持的虚拟地址空间,例如,来自mmap文

Process Explorer中可用的内存图表中,顶部的图表显示提交历史记录。这在操作系统级别上实际表明了什么

为了测试这是否是进程在堆上分配的内存,我编写了一个小程序,多次递增malloc 100 MB。提交历史图增长了一段时间(高达1.7GB的内存分配),此后没有增长,尽管程序在内存上进行了malloc操作


那么,这张图显示的是什么?如何使用此信息了解/分析Windows的状态?

提交级别是分配给系统中所有进程的匿名虚拟地址空间量。(它不包括任何文件支持的虚拟地址空间,例如,来自mmap文件的虚拟地址空间。)在process explorer中,“提交历史记录”图表显示该值随时间的大小

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

从该值中可以得出一些关于系统的结论:

  • 如果该值小于当前RAM(内核和系统开销除外),则系统不太可能交换(使用分页文件),因为在最坏的情况下,所有内容都应该放在内存中
  • 如果该值远大于物理内存使用量,则某些程序正在分配大量虚拟地址空间,但尚未使用它
  • 退出应用程序将减少提交的内存使用,因为它的所有虚拟地址空间都将被清除
你的实验证实了这一点。我怀疑您遇到了地址空间限制(windows中的32位进程……可能300MB消失在碎片、库和文本中?)

当您在上面说“如果此值远大于物理内存使用量,则某些程序正在分配大量虚拟地址空间,但尚未使用它。”有没有办法隔离哪个程序正在分配所有虚拟地址空间?在我的场景中,我有8GB的RAM,但我看到12.2是系统提交的,使用了6.4物理RAM。我的速度变慢了,但当我查看process explorer时,几乎没有I/O(磁盘上没有任何启动),CPU使用率也几乎没有,这让我觉得这是一个RAM可用性问题。