如何测量 Windows 下程序的总 RAM 使用率?

Ude*_*deF 8 memory windows process tasks process-explorer

我正在比较不同便携式浏览器的内存使用情况,但这个问题对于在任务管理器的几个子进程中打开的所有程序都是通用的。

请参阅下面来自 Sysinternals Process Explorer的屏幕截图:

一个程序打开多个进程

例如,Firefox 只在一个进程中打开,而 Google Chrome 为每个选项卡启动多个进程。

那么如何获得一个程序打开的所有进程的总 RAM 使用量呢?(这里以谷歌浏览器为例。)

当然我可以用计算器算一下总和……但一定有更方便的方法!

Jam*_*han 12

一般的答案是:你不能,不准确。

假设您询问的是 RAM(物理内存)而不是虚拟内存 - Windows 为每个进程发布两个相关计数器,总工作集和私有(进​​程)工作集。(PerfMon 将向您显示这些。)任务管理器显示“私有”和“共享”(将这些加在一起就是总数)。Process Explorer 将这些显示为“Working Set”(总数)、“WS Private”、“WS Shareable”和“WS Shared”。ProcExp 进行了一些“深入挖掘”以找到后两者。

“共享”或总数的共享部分是导致问题的原因。

使用进程资源管理器术语,“可共享”显示已分配给进程但至少可能与其他进程共享的 RAM。“共享”是至少一个其他进程实际共享的子集。

问题是您不知道有多少或哪些进程实际共享它。将所有“可共享”或“共享”数字相加将得到比实际更大的总数,因为共享页面将计入所有碰巧共享它们的进程中。并非每个进程,即使是运行相同程序的进程(如 Chrome),也不一定会在其总地址空间中共享相同的页面。

对于一组都运行相同 .exe 的进程,例如 Chrome 的:通过将所有“WS Private”计数器相加,然后将所有 Chrome 实例的“WS 可共享”计数器中的最大计数器相加,您将得到最小值图……但实际可能更大。

Chrome 确实有 ge0rdi 提到的那个很好的自我报告功能。您想要的计数器是“内存”下的计数器。我机器上的 Chrome 与操作系统报告的内容不完全一致,但对于所有实际用途来说已经足够接近了。

另一件要考虑的事情是,虚拟内存操作系统中任何进程或进程子集的“内存使用”都极其依赖于进程的行为和 RAM 压力。在具有或多或少 RAM 的系统上运行它,或者在运行或多或少其他东西并要求 RAM 的系统上运行它,数字看起来会大不相同。因此,对于任何给定进程“需要”多少 RAM,没有一个固定的数字。因此,即使“注意您的可用 RAM,然后关闭所有 Chrome 实例并查看可用 RAM 增加了多少”也不是一个好的测试。操作系统可能会将一些已释放的 RAM 分配给其他进程,尤其是在它们忙碌的情况下。


ge0*_*rdi 10

我一般不知道如何执行此操作,但是要测量 Chrome 的总内存使用量,您可以写入about://memory地址栏。

Summary部分显示了所有 Chrome 进程的总内存使用情况。