如何从 Windows 命令行准确测量某些程序的内存使用情况?

如何从 Windows 命令行准确测量某些程序的内存使用情况?

我正在尝试编写自动化程序来测试网站的内存泄漏。我可以通过切换两个页面来查看内存泄漏,因此我使用 selenium 来自动切换这两个页面。在切换之前、每次切换这两个页面之后以及大约 150 次之后,我想知道每个浏览器的内存使用量变化了多少。

以 chrome 为例,我尝试使用tasklist | find "chrome.exe"并汇总所有这些进程的内存使用量输出。我不确定我是否做错了什么,或者它是否给出了与我想象的不同的数据,但它tasklist给出的内存使用量数字与任务管理器给出的数字不同。

现在尝试一下,所有 chrome.exe 条目之间的总内存使用量tasklist显示为 1259MB,但任务管理器显示为 ~530MB。此外,tasklist昨天进行了 150 次迭代后显示为 ~1800MB(内存使用量已稳定下来,没有再增加),但任务管理器显示已使用 ~3300MB 并且仍在增加。关闭该选项卡会使任务管理器中的 chrome 内存使用量降至 ~700MB。如果继续运行,浏览器最终会崩溃,因此使用tasklist时无法看到内存泄漏的迹象,但可以在任务管理器中看到。

为什么tasklist任务管理器给出的测量结果不同?有没有办法从命令行获取任务管理器提供的数字,以便我可以自动化它?我尝试了 https://docs.microsoft.com/en-us/windows/desktop/api/Psapi/nf-psapi-getprocessmemoryinfo但我不确定这是否是我要找的信息?

答案1

为什么任务列表和任务管理器给出不同的测量结果?

默认情况下,任务管理器将内存显示为“内存 - 私有工作集”。

如果您选择“内存 - 工作集”列,您将看到与任务列表显示的相同值。

我正在运行 ProcessHacker(而不是 TaskMan),因此以下屏幕截图略有不同,但可以表明差异:

在此处输入图片描述

> tasklist | find "firefox.exe"
firefox.exe                   1308 Console                    1     446952 K
firefox.exe                  10036 Console                    1      44540 K
firefox.exe                   9664 Console                    1     305092 K
firefox.exe                   9352 Console                    1     433052 K
firefox.exe                   7764 Console                    1     282256 K
firefox.exe                   2108 Console                    1     334196 K
firefox.exe                   6956 Console                    1     459480 K

有关私有内存和工作集内存之间的差异的更多信息,请参阅下面的链接。


进一步阅读

相关内容