任务管理器显示启动时占用了大约 800 MB,性能选项卡和资源监视器显示启动时占用了大约 3.9 GB。大约 24 小时后,占用量将达到 ~13 GB。两天,即使是在睡眠状态下,系统在切换程序时也会出现问题。
我尝试关闭在启动时运行的程序。我切换浏览器以查看它是 Chrome 还是其扩展程序。我关闭了与硬件捆绑的软件,例如 Logitech 的键盘自定义中心或 AMD Radeon 控制中心。几个小时后,内存使用量上升到约 7-8 GB,我无法确定是什么程序导致了这种情况。
我在网上搜索后发现这是一个典型的内存泄漏案例。我安装了 RAMMap 来尝试找到罪魁祸首,但说实话,我不太确定如何使用它来真正找到罪魁祸首。我使用了更多我在网上找到的工具,得到了poolmon(内存池监视器)。我按照/b
正确的顺序运行它?我不记得我在哪里看到过很多关于如何使用它的信息,但我相信那个论点把我想要的放在了最上面。
起初我以为我读的是标题或总数,因为标签是“时间”,而不是随机的大写和小写字符串。当我计算其下方行中分配和释放的内存时,我发现它根本不是一个总数。几个小时后,“时间”行分配的内存比释放的内存多 8,000,000 多(大约是 900 万减 100 万)(我认为是以千字节为单位,但如果只是以字节为单位,那么这可能不是问题所在 - 我需要指出这一点)。我在网上看到的一些指南表明它可能分配的数字多于释放的数字,但即使是第二多的分配和释放的数字也可能相差约 1000。
我导航到 system32/drivers 文件夹,并使用findstr /m /l Time *.sys
查找关联的驱动程序。结果出现了一个很长的驱动程序列表,因此我根据网站的建议使用了findstr /m /l hTime *.sys
。这带来了三件事:
FINDSTR: Cannot open FACEIT.sys
FINDSTR: Cannot open FACEIT2.sys
KNetPwrDepBroker.sys
所以前两个实际上缺少了一些东西,但除非我弄错了,否则 FACEIT 指的是我过去使用过的 csgo 替代匹配客户端。不确定它为什么有系统文件,但我认为它的广泛反作弊功能可能是原因。由于我目前不使用它,所以我卸载了它。然后,三者中的最后一个是KNetPwrDepBroker.sys
。除了它由微软签名外,我对这个文件一无所知。所有试图在 Google 上搜索这个文件是什么的尝试都以人们询问它是否是恶意软件而告终。有一两个网站提供这个文件的下载,但我根本不相信——如果这个文件有错误,我更希望 Windows 来替换它,而不是一些即使我听说过也不会信任的网站。还有一个关于内存泄漏的 bleepingcomputer 论坛帖子——但不幸的是,它实际上与这个文件无关,它只是包含在一个大日志中。
我让 Windows 运行了所有可选更新,检查了有问题的驱动程序 - 缺少一个 AMD PCIe 加密驱动程序,但修复后没有任何变化。我现在运行标签搜索,仍然返回选项二和选项三 - 因此卸载 FACEIT 并没有从系统中删除“FINDSTR:无法打开 FACEIT2.sys”。这个内存泄漏是上个月或四个月发生的,所以虽然这可能是一个问题,甚至是一个令人担忧的问题,但可能不是我的问题。当然,它KNetPwrDepBroker.sys
仍然存在,我想知道它是什么,这样我就可以卸载驱动程序并重新安装。我假设它是一个驱动程序。
所有这些,我可能只是错误地识别了原因。每个解释如何使用 RAMMap 进行识别的网站基本上都说“映射文件看起来很大,转到物理页面并查找问题”,我甚至无法判断是否存在问题。但如果我在启动时几乎不运行任何程序,但仍然遇到此问题,那么这可能是驱动程序的问题吗?
编辑:https://i.stack.imgur.com/CJ6S4.jpg来自评论的小帖子相册。包括我昨晚制作的 RAMMap 的两张截图,我几乎没有看到任何变化。性能选项卡也一夜之间保持在 4GB。这可能是好事,我仍然无法确定为什么系统占用了 4GB,而所有正在运行的进程应该占用不到 1GB……但我可以一次运行一个应用程序来查找是否还有任何内存泄漏。
答案1
没有任何错误。
清除工作集毫无意义。Windows 每次都会随机地在每个进程页面上执行此操作。
4 Gb 是正常的。
您实际上使用了 13 GB - 4 GB + 9 GB 作为缓存。这 9 GB 被计入两者已缓存和可用的。
将鼠标悬停在条形图中的元素上以获取更多信息。
这是一篇关于微软实现的英特尔虚拟机/虚拟内存内存管理的文章。https://www.labri.fr/perso/betrema/winnt/ntvmm.html
除了限制变大之外,唯一的重大变化是文件缓存。物理页面将位于文件缓存中。它也可能被映射到备用列表(从程序中删除但仍在内存中以防程序需要它)或程序的地址空间。
工作集是程序地址空间中的物理内存量。但是,其余内存可能都位于待机列表中。默认情况下,程序的工作集较小,但程序可以更改它(就像视频编辑器一样)。
如果程序突然需要大量内存访问或在启动程序时,这允许 Windows 进行快速内存管理。