Как диагностировать ненормальное использование процессора svchost.exe? [Дубликат]


19

На этот вопрос уже есть ответ здесь:

У меня есть ноутбук с 32-разрядной системой Win 7 на базе двухъядерного процессора Pentium (это ноутбук 2010 года). Иногда он работает нормально, но обычно он работает на холостом ходу при 100% загрузке процессора. Процессор используется двумя процессами svchost.exe (по 50% каждый). Насколько я понимаю, это сервисный хост. Есть ли способ узнать, какой сервис является виновником?

Примечательно: это происходит даже в безопасном режиме.


1
Вы можете использовать Process Explorer для просмотра сервисов, которые работают под двумя экземплярами svchost ( technet.microsoft.com/en-us/sysinternals/processexplorer.aspx )
— Yorik

@Yorik: Я думал об этом, но Process Explorer не показывает ничего полезного.
— Violet Giraffe

5
В Windows 7 я бы сказал, что в настоящее время & gt; 90% проблем с процессором svchost связаны со службой Windows Update. Если у вас действительно возникают проблемы с обновлением системы (что может быть затруднительно при новой установке со старым процессором), попробуйте установить KB3050265, KB3138612 и KB3145739 без сетевого подключения. Затем перезагрузите компьютер и выполните поиск обновлений.
— ontrack

@ontrack: интересно. На самом деле, я думаю, что проверка обновлений отключена на этой машине, вероятно, она никогда не обновлялась с 2010 или 2012 года. У меня нет желания устанавливать обновления, мне просто нужно исправить проблему с процессором. Если вы правы, поможет ли отключение службы Центра обновления Windows?
— Violet Giraffe

об этом спрашивали так много раз. см. дуп. Вы, вероятно, видите проблему со сканированием WU. Решите это по шагам в моем ответе: superuser.com/a/996072/174557
— magicandre1981

Ответы:


28

В качестве примера svchost.exe размещены несколько системных служб, вот как разделить службы, каждый на свой экземпляр svchost.exe, чтобы узнать, какая служба потребляет процессор.

Процедура выглядит следующим образом:

  1. Используйте диспетчер задач, чтобы показать все процессы, отсортированные по убыванию ЦП и отметьте PID процессов, которые потребляют процессор

  2. В командной строке (cmd) введите команду
    Tasklist /svc /fi "IMAGENAME eq svchost.exe"
    enter image description here

  3. Проблемные экземпляры svchost.exe теперь могут быть найдены по их PID а справа вы найдете список системных служб, которые они размещают

  4. Для каждого из имен в списке введите следующую команду в Командная строка (cmd), которая запускается от имени администратора:
    sc config <name> type= own
    (Обратите внимание на пробел между ‘=’ и ‘own’)

  5. перезагружать

Системные службы, которые вы разделили, теперь будут работать в своем собственном экземпляре. svchost.exe и можно увидеть в диспетчере задач на вкладке «Процессы». Вы можете щелкнуть правой кнопкой мыши по экземпляру и выбрать «Перейти к сервису (ам)» перейти непосредственно к сервису или снова использовать команду tasklist.

Для получения дополнительной информации см. Статью Microsoft
Начало работы с SVCHOST.EXE ,


7

Process Explorer делает это легко Я подтвердил, что это работает с Process Explorer v16.20 на 64-битной Windows 7 Professional и 64-битной Windows 10 Pro.

  1. Запустите Process Explorer с повышенными правами.
  2. Найдите svchost.exe процесс с высоким (или даже просто измеримым / непустым) значением в CPU колонка. Сортировка по Process или же CPU колонка может помочь с этим.
  3. Щелкните правой кнопкой мыши svchost.exe обработать и выбрать Properties...,
  4. В окне свойств процесса выберите Threads Вкладка. Все темы в этом процессе будут отображаться.
  5. Найдите поток с высоким (или, опять же, просто измеримым / непустым) значением в CPU колонка. Сортировка по CPU колонка может помочь с этим. Process Explorer process Threads tab
  6. Service столбец покажет имя службы, в которой работает этот поток.

Если название сервиса вам не знакомо ...

  1. В окне свойств процесса выберите Services Вкладка. Все сервисы, которые работают в этом процессе, будут отображены.
  2. Подходим Service колонка на Services вкладка к значению Service колонка на Threads Вкладка, расположенная на шаге 6. Process Explorer process Services tab
  3. Display Name В столбце будет отображаться понятное название сервиса. Описание выбранной услуги появится под списком услуг.

Ах, я не знал об этих расширенных функциях Process Explorer. Благодарю.
— Violet Giraffe

3

Ты можешь использовать Диспетчер задач , Есть и другие способы (командная строка или даже написать какую-нибудь программу, используя WinAPI ), но я не буду обсуждать их здесь. Прежде чем идти дальше, ваш пользователь должен иметь права администратора.

На Процессы вкладка:

  • Проверьте Показать процессы от всех пользователей ,
  • Щелкните правой кнопкой мыши по процессу "заголовок таблицы" (который содержит имена столбцов, такие как Название изображения , PID , Имя пользователя , ЦПУ , ...) и выберите Выберите столбцы ... ,
    • В появившемся диалоговом окне прокрутите вниз и убедитесь, что Командная строка , а также PID (идентификатор процесса) затем нажмите Хорошо ,
  • Назад к Процессы вкладка, нажмите на ЦПУ Заголовок столбца, так что процессы будут упорядочены по их загрузке процессора (обратите внимание, что процессы могут отображаться в порядке возрастания / убывания - каждый щелчок по ЦПУ переключает заказы), нажимайте, пока 2 процесса не появятся в верхней части таблицы. Теперь вы можете видеть их командную строку (я не знаю, но у меня есть ощущение, что один из них netsvcs (Сетевые сервисы)), а также их PID.

  • Далее необходимо сопоставить 2 процесса с сервисами. Для этого вы можете:

    • Щелкните правой кнопкой мыши на них, а затем Перейти в сервис (ы) ... , Это перейдет к Сервисы вкладка, в которой выбрана вся служба, запущенная в этом процессе (для этой опции вам не нужны никакие предыдущие шаги :)).
    • Открой Сервисы привязывать ММС , При двойном щелчке на сервисе (имеет смысл проверить только те, которые работают), под Путь к исполняемому файлу вы можете увидеть их командную строку, что вы должны сделать матч на.
  • На W10 Вы можете просмотреть точную информацию, которая вам нужна Монитор ресурсов (вы можете начать это с Диспетчер задач , Спектакль вкладка). Там вы идете в ЦПУ Вкладка и сервисы и их загрузка процессора перечислены.

EDIT0 : Обновленный ответ, чтобы обеспечить более простой (и более понятный) подход вместо царапая мою правую голову левой рукой стиль один, который я изначально разместил.


Я никогда не замечал, что вы можете видеть командную строку, аккуратно! Не так просто, как ответ Гарримка, но полезно знать.
— Violet Giraffe

Диспетчер задач может сделать это самостоятельно. Если при переключении на вкладку Службы выбран процесс svchost, там будут выбраны службы, работающие в этом процессе.
— Simon Richter

1
В самом деле? На W10 этого не происходит (по крайней мере, когда какой-то сервис уже выбран). Единственный способ заключается в rclick в процессе, а затем выберите Перейти в сервис (ы) (вариант, который я пропустил - скорее всего, он существует в W7 также). К сожалению, я не могу проверить.
— CristiFati

1
@CristiFati эта опция существует с Windows Vista (источник: technet.microsoft.com/en-us/library/ff642468.aspx ), вам, вероятно, следует добавить его в ответ вместо сопоставления PID вручную
— Vasily Alexeev
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.