我正在尝试编写自动化程序来测试网站的内存泄漏。我可以通过切换两个页面来查看内存泄漏,因此我使用 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
有关私有内存和工作集内存之间的差异的更多信息,请参阅下面的链接。