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


19

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

Зверніть увагу: це відбувається навіть у безпечному режимі.


1
Ви можете використовувати провідник процесів, щоб переглянути сервіси, які працюють під двома примірниками svchost ( technet.microsoft.com/en-us/sysinternals/processexplorer.aspx )
Yorik

@Yorik: Я думав про це, але ProcessExplorer не показав нічого корисного.
Фіолетова жирафа

5
У Windows 7 я б сказав, що в даний час> 90% проблем з процесором svchost пов'язані зі службою оновлення Windows. Якщо у вас є реальні проблеми з оновленням системи (що може бути складно при новому встановленні зі старим процесором), спробуйте встановити KB3050265, KB3138612 та KB3145739 без підключення до мережі. Потім перезавантажте і шукайте оновлення.
ontrack

@ontrack: Цікаво. Власне, я думаю, що перевірка оновлень на цій машині відключена, вона, ймовірно, не колись оновлювалася з 2010 або 2012 року. І я не маю бажання встановлювати оновлення, мені просто потрібно виправити проблему з процесором. Якщо ви маєте рацію, просто відключите довідку служби Windows Update?
Фіолетова жирафа

про це запитували стільки разів. див. дуб. Ви, ймовірно, побачили проблему зі скануванням WU. Вирішіть це з кроків у моїй відповіді: superuser.com/a/996072/174557
magicandre1981

Відповіді:


28

Оскільки екземпляр svchost.exe розміщує декілька системних служб, ось як розділити служби, кожен на свій примірник svchost.exe, щоб дізнатися, яку службу споживає ЦП.

Процедура така:

  1. Використовуйте диспетчер завдань, щоб показати всі процеси, відсортовані за зменшенням процесора, і позначити PID процесів, які споживають процесор

  2. У командному рядку (cmd) введіть команду
    Tasklist /svc /fi "IMAGENAME eq svchost.exe"
    введіть тут опис зображення

  3. Тепер проблемні екземпляри svchost.exe можуть знаходитись за їх PID, а праворуч ви знайдете список системних служб, які вони розміщують

  4. Для кожного з імен у списку введіть наступну команду в командний рядок (cmd), який запускається як адміністратор:
    sc config <name> type= own
    (Зверніть увагу на пробіл між '=' та 'own')

  5. Перезавантажте

Системні служби, які ви розділили, тепер будуть запускатись у власному екземплярі svchost.exe і їх можна побачити в диспетчері завдань на вкладці Процеси. Ви можете клацнути правою кнопкою миші на екземпляр і вибрати "Перейти до служби (служб)", щоб перейти безпосередньо до служби, або знову скористатися командою списку завдань.

Для отримання додаткової інформації дивіться статтю Microsoft
Початок роботи з SVCHOST.EXE Виправлення неполадок .


7

Провідник процесів робить це просто. Я підтвердив, що це працює з Process Explorer v16.20 для 64-розрядних Windows 7 Professional та 64-розрядних Windows 10 Pro.

  1. Запуск Провідника процесів підвищений.
  2. Знайдіть svchost.exeу CPUстовпці процес із високим (або навіть просто вимірюваним / непорожнім) значенням . Сортування за стовпцем Processабо CPUстовпцем може допомогти у цьому.
  3. Клацніть svchost.exeпроцес і клацніть правою кнопкою миші Properties....
  4. У вікні властивостей процесу виберіть Threadsвкладку. Всі потоки в цьому процесі будуть відображені.
  5. Знайдіть нитку з високим (або, знову ж таки, просто вимірюваним / непорожнім) значенням у CPUстовпці. Сортування за CPUстовпцем може допомогти у цьому.Вкладка Process Explorer "Теми"
  6. У Serviceстовпці відображатиметься назва служби, в якій працює цей потік.

Якщо назва послуги вам не відома ...

  1. У вікні властивостей процесу виберіть Servicesвкладку. Будуть показані всі служби, які працюють у цьому процесі.
  2. Зіставте Serviceстовпчик на Servicesвкладці зі значенням Serviceстовпця на Threadsвкладці, що знаходиться на кроці 6.Вкладка Служби обробки процесів
  3. У Display Nameстовпці відображатиметься дружня назва служби. Опис вибраної послуги з’явиться під списком послуг.

Ах, я не знав про ті розширені функції Провідника процесорів. Спасибі.
Фіолетова жирафа

3

Ви можете використовувати диспетчер завдань . Є й інші способи (командний рядок або навіть написати якусь програму за допомогою WinAPI ), але я не буду їх обговорювати тут. Перш ніж іти далі, ваш користувач повинен мати адміністративні привілеї.

На вкладці " Процеси" :

  • Поставте прапорець Показувати процеси від усіх користувачів .
  • Клацніть правою кнопкою миші на процеси «таблиці заголовка» (який містить імена стовпців , як ім'я зображення , PID , ім'я користувача , CPU , ...) і виберіть Вибрати стовпці ... .
    • У діалоговому вікні, що спливе, прокрутіть вниз і переконайтесь, що ви поставили прапорець у командному рядку та PID (ідентифікатор процесу), а потім натисніть OK .
  • Поверніться до вкладки " Процеси" , натисніть на заголовок стовпця процесора, щоб процеси були впорядковані за споживанням процесора (зауважте, що процеси можуть відображатися у порядку зростання або зменшення - кожен клік на процесорі перемикає замовлення), натискайте до тих пір, поки два процеси з'являються вгорі таблиці. Тепер ви зможете побачити їх командний рядок (я не знаю, але у мене є відчуття, що один із них netsvcs(мережеві послуги)), а також їх PID.

  • Далі вам потрібно співставити 2 процеси з сервісами. Для цього ви можете:

    • Клацніть правою кнопкою миші на них , а потім Перейти до служби (и) ... . Це перейде на вкладку Сервіси , вибравши всю службу, що працює в цьому процесі (для цієї опції вам не потрібен жоден з попередніх кроків :)).
    • Відкрийте оснащення Служб у ммс . Якщо подвійний клік на сервісі (має сенс перевірити лише запущені), у розділі Шлях до виконуваного файлу ви можете побачити їх командний рядок, за яким слід виконувати збіг.
  • На W10 ви можете переглянути точну інформацію, яка вам потрібна, за допомогою монітора ресурсів (ви можете запустити її з диспетчера завдань , вкладка Продуктивність ). Там ви переходите на вкладку CPU і перераховані служби та їхнє споживання процесора.

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


Я ніколи не помічав, що ви можете бачити командний рядок, акуратно! Не настільки простий, як відповідь Гарріма, але добре знати.
Фіолетова жирафа

Диспетчер завдань може зробити це самостійно. Якщо при переході на вкладку Сервіси обрано процес svchost, там будуть обрані служби, що працюють у цьому процесі.
Саймон Ріхтер

1
Дійсно? У W10 цього не відбувається (принаймні, коли вже вибрано якусь послугу). Єдиний спосіб - натиснути на процес, а потім вибрати Перейти до сервісів (варіант, який я пропустив - швидше за все, він існує і в W7 ). На жаль, я не в змозі перевірити.
CristiFati

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