当 Visual Studio 2013 运行时,services.exe 间歇性地使用 10-20 GB 内存

当 Visual Studio 2013 运行时,services.exe 间歇性地使用 10-20 GB 内存

当我在一台机器上运行 Visual Studio 2013 时,我注意到 services.exe 会间歇性地消耗 10-20 GB 的内存。这种情况是随机发生的,似乎与我所做的任何事情都无关;我可以打开一个项目并将其留在后台,services.exe 最终会开始消耗过多的内存。

结果,我的整个系统都无法使用(可能是由于内存抖动),我不得不关闭 Visual Studio。即使关闭它,内存使用量也可能需要长达 5 分钟才能回落。在极端情况下,我不得不重新启动我的机器,因为我无法启动任务管理器或进程管理器。

我有三台机器,只有一台遇到了这个问题。有问题的机器是一台 Mac Pro,有 24 个处理器和 16 GB 的 RAM,运行 Windows 7 Ultimate N。我使用 Bootcamp 来运行 Windows。这台机器相当干净,除了 Bootcamp 之外,只安装了 Visual Studio 和适用于 Windows 的 Git。另一位开发人员也使用配置更高的 Bootcamp,他们没有遇到这个问题,所以这似乎不是 Bootcamp 的普遍问题。

这可能是什么问题?有什么方法可以诊断吗?

服务程序

在此处输入图片描述

答案1

乍一看,我认为这可能与本机图像生成服务 (ngen) 有关。这可以直接调用,也可以作为服务运行。但服务的名称实际上是mscorsvw.exe(我认为;除非它在 ​​.NET 4.5 / VS 2013 中发生了变化)。另外,我忘了 services.exe 实际上是服务控制经理,并且不指任何特定的服务,因为 services.exe 中实际上没有托管任何 Windows 服务。

问题是,这将非常具体到您的特定配置。它可能是硬件;可能是驱动程序;它可以可以想象病毒会以看似合法的进程的形式运行,以试图掩盖自己。

在“管理工具”下检查 Windows 事件日志。它是否被恶意地发送垃圾邮件?我相信事件日志写入涉及 services.exe。

另一个可能有趣的是,热插拔设备驱动程序(用于 USB 外围设备,现在甚至显卡)是通过 services.exe 加载的。维基百科

Type 注册表值为 SERVICE_KERNEL_DRIVER 或 SERVICE_FILE_SYSTEM_DRIVER 的服务会得到特殊处理:这些服务代表设备驱动程序,ScStartService() 会为其调用 ScLoadDeviceDriver() 函数,该函数会加载相应的驱动程序(通常是扩展名为 .sys 的文件),该驱动程序必须位于 %SystemRoot%\System32\Drivers\ 目录中。为此,会调用 NtLoadDriver 系统调用,并将 SeLoadDriverPrivilege 添加到 SCM 的进程中。

因此,SCM(又名services.exe)与系统的设备驱动程序之间存在脆弱且高度特权的交互。驱动程序很可能出现故障并定期尝试重新加载自身(可能是由于崩溃),并在其初始化例程中消耗 SCM 中的大量 RAM,该初始化例程在 services.exe 中进程内完成。

这个答案非常具有推测性,因为我无法根据您提供的信息给出准确的答案。抱歉。

可以尝试的事情:

  • 密切关注事件日志。查看在您遇到延迟时是否有任何内容被写入。
  • 看看在未运行 Visual Studio 的情况下是否会发生这种情况。
  • 尝试更新您的驱动程序。我知道这听起来很傻,但实际上可能是驱动程序。

相关内容