2

Когда я запускаю Visual Studio 2013 на одном из моих компьютеров, я замечаю, что services.exe периодически будет потреблять 10-20 ГБ памяти. Это происходит случайно и, кажется, не имеет никакого отношения ко всему, что я делаю; Я могу просто открыть проект и оставить его в фоновом режиме, и services.exe в конечном итоге начнет потреблять чрезмерную память.

В результате вся моя система становится непригодной для использования (предположительно из-за перегрузки памяти), и мне приходится убивать Visual Studio. Даже после его уничтожения может пройти до 5 минут, прежде чем использование памяти уменьшится. В крайних случаях мне приходится перезагружать компьютер, потому что я не могу вызвать диспетчер задач или Process Explorer.

У меня три машины, и только одна машина испытывает эту проблему. Рассматриваемая машина - Mac Pro с 24 процессорами и 16 ГБ ОЗУ, работающая под управлением Windows 7 Ultimate N. Я использую Bootcamp для запуска Windows. Машина довольно чистая, на которой установлен только Visual Studio и Git для Windows, поверх Bootcamp. Другой разработчик также использует Bootcamp с более высокими характеристиками, и они не сталкиваются с этой проблемой, так что это не является общей проблемой Bootcamp.

В чем может быть проблема? Есть ли способ диагностировать это?

services.exe

1 ответ1

0

На первый взгляд я подумал, что это как-то связано с Native Image Generation Service (ngen). Это можно вызвать напрямую или запустить как службу. Но название службы на самом деле mscorsvw.exe (я думаю; если только она не изменилась в .NET 4.5 / VS 2013). Кроме того, я забыл, что services.exe на самом деле является диспетчером управления службами и не относится к какой-либо конкретной службе, поскольку на самом деле никакие службы Windows не размещаются в services.exe.

Проблема в том, что это будет супер специфично для вашей конкретной конфигурации. Это может быть аппаратное обеспечение; это может быть водитель; возможно, это может быть вирус, работающий как законный процесс, пытающийся замаскировать себя.

Проверьте журнал событий Windows в разделе «Администрирование». Это спам вопиюще? Я полагаю, что запись журнала событий включает services.exe.

Также, возможно, представляет интерес то, что драйверы устройств горячего подключения (для периферийных устройств USB, а в наши дни даже для видеокарт) загружаются с помощью services.exe. Из википедии:

Службы, чье значение реестра типа равно SERVICE_KERNEL_DRIVER или SERVICE_FILE_SYSTEM_DRIVER, обрабатываются специально: они представляют драйверы устройств, для которых ScStartService() вызывает функцию ScLoadDeviceDriver(), которая загружает соответствующий драйвер (обычно файл с расширением .sys), который должен находиться в% SystemRoot%\System32\Drivers\ каталог. Для этого вызывается системный вызов NtLoadDriver, и в процесс SCM добавляется SeLoadDriverPrivilege.

Таким образом, SCM, aka services.exe , имеет хрупкое и высокопривилегированное взаимодействие с системными драйверами устройств. Скорее всего, драйвер может работать со сбоями и периодически пытаться перезагрузить себя (возможно, из-за сбоя) и потреблять много оперативной памяти в SCM во время процедуры инициализации, которая выполняется внутри services.exe.

Этот ответ очень умозрительный, потому что у меня нет точного ответа на основании предоставленной вами информации. Сожалею.

Вещи, чтобы попробовать:

  • Смотреть журнал событий, как ястреб. Посмотрите, будет ли что-нибудь написано в то время, когда вы испытываете отставание.
  • Посмотрите, происходит ли это без запуска Visual Studio.
  • Попробуйте обновить ваши драйверы. Я знаю, это звучит глупо, но на самом деле это могут быть водители.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .