如何调试 services.exe 周期性的 100% 内存使用率?

如何调试 services.exe 周期性的 100% 内存使用率?

我正在通过 Boot Camp 在 MacBook Pro 上运行 Windows 7 SP1(即它本地启动)。

最近services.exe开始出现这样的行为:每隔 15 分钟左右,它会在 1-2 分钟内加速使用系统上的所有可用内存(在我的情况下是所有 8GB 内存)。它会在那里停留几分钟,然后再次下降到正常水平。

该过程本身从使用约 40MB 内存变为使用约 5GB+ 内存,然后再变回到约 40MB。

我在使用过程中获得了该过程的转储,procdump并且 3GB 文件包含重复数据 - 当我使用 查看它时,它看起来像指向函数调用或返回地址的指针windbg

我也看了一下,procmon但数据没有什么启发性——没有什么可看的,而且看起来很正常。

我正在寻找有关如何更好地查看应用程序内存使用情况的指针,以便我可以尝试找出导致这种行为的原因。

答案1

好的。如果这种情况大约每 15 分钟发生一次,您可以等待它发生并迅速采取行动。无需转储该过程。

Services.exe是启动服务的进程。服务不会自行运行,而是由进程托管svchost.exe

因此要知道为什么会发生这种情况,为什么你的机器会消耗大量的内存,你需要知道哪个服务导致了这种情况。

为了实现这一点,您可以使用 Microsoft Sysinternals 工具进程探索器。使用此工具,您可以按内存对进程进行排序,更有趣的是,如果您单击某个svchost.exe进程,您将能够看到它正在运行哪些服务。在 Process Explorer 中,您可以按父进程和子进程树查看进程,因此您可以看到哪个 svchost 的哪个子进程导致了问题。

使用 Procesx Explorer,您还可以查看进程内已加载的线程(您必须加载符号才能看到它们的真实名称,只需转到选项菜单,配置符号),如果您看到任何奇怪的线程,您将能够看到它的线程并查看哪个线程可能导致挂起。

最后,如果使用 Process Explorer 时这种情况发生得太快,您可以右键单击某个进程并选择暂停。这将暂停执行,直到您手动恢复它,这样您就有时间分析事情了。

答案2

我最近遇到了同样的问题,但我无法找出导致此行为的任何服务。此外,故障服务会导致 svchost.exe 内存使用量增加,而不是 services.exe 内存使用量增加。我最终发现,访问 EFS 加密文件夹中的大量文件会触发高内存使用量(例如,对 >10GB 的 GIT 存储库进行大量检出,而 EFS 加密文件夹中的小文件却很少)。解密文件夹似乎为我解决了这个问题。我想我需要切换到 Bitlocker 或类似的东西……

相关内容