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