Как диагностировать ненормальное использование процессора 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.