首页 > 解决方案 > processexploer PrivateBytes 可能没有显示 CMemFile 和/或 CMapViewofFile 分配,有没有办法得到这个

问题描述

我有一个虚拟内存耗尽案例(达到提交限制),其中使用 Process Exploer 的 3-4 个最高内存消耗任务具有 200MB-1.2GB 的私有字节和峰值私有字节。将所有峰值私有字节加起来小于 10Gb。然而,提交内存是 57GB 页面文件大小的 99% 或 56GB。我一直在试图弄清楚发生了什么,是否有 100 个进程弹出和消失等。但似乎提交费用将包括映射到内存中的任何文件对象,但这不会出现在 Private Bytes 中。
我正在测试这个理论。请参阅此链接: 讨论 CommitLimit 和文件映射视图

这种行为可以解释过去几周我所看到的情况,因为我知道我们使用了一种消息传递技术,该技术会创建一个可能会变得非常大的 CMemFile 对象。多个客户端将通过此对象传输数据。

我现在很好奇的是,ProcessExplorer.exe 工具有一个 Virtual Size 列,我看到了两种类型的值。我预计 2.1TB 的一些任务是最大地址空间,而且似乎这与提交限制无关。然后还有其他 4..38Gb 似乎可以添加它们以产生实际的提交限制。如果是这样,似乎有一种方法可以查询 Windows 操作系统并判断 CMAPPed 文件何时增加提交限制。

寻找可以显示影响提交限制的内存量的“C”代码或 Powershell 脚本。在使用内存映射文件的情况下。

如果我能找到答案,我会在这里发布。上面提到的链接非常有用,它首先表明内存映射文件是私有字节的缺失部分。

标签: memory-managementsysinternalsprocess-explorer

解决方案


推荐阅读