memory-management - 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 脚本。在使用内存映射文件的情况下。
如果我能找到答案,我会在这里发布。上面提到的链接非常有用,它首先表明内存映射文件是私有字节的缺失部分。
解决方案
推荐阅读
- filepond - Filepond removeFiles 似乎不起作用
- azure - 如何在 azure devops 扩展 api 中获取当前版本的管道 ID
- swift - Swift @ObservedObject 用另一个属性初始化
- javascript - 如何赋予表头价值?
- javascript - 如何使用 removeChild 删除特定元素
- bash - 如果数组不包含if语句中的值,bash如何插入数组
- c++ - 如何在派生类中初始化基类静态内联数据成员?
- android - 如何从列表中获取对象列表
- ios - 尽管角半径是高度的一半,但 UIButton 未正确舍入
- r - 在 R 中计算 Gamma 分布的更新过程