Jak zdiagnozować nieprawidłowe użycie procesora przez svchost.exe? [duplikować]

19

Mam laptopa z 32-bitowym systemem Win 7 zasilanym dwurdzeniowym Pentium (to laptop z 2010 roku). Czasami działa dobrze, ale zwykle pracuje na biegu jałowym przy 100% obciążeniu procesora. Procesor jest zużywany przez dwa procesy svchost.exe (po 50%). O ile rozumiem, jest to host usług. Czy jest jakiś sposób, aby dowiedzieć się, która usługa jest winowajcą?

Uwaga: dzieje się to nawet w trybie awaryjnym.

Fioletowa Żyrafa
źródło
1
Możesz użyć eksploratora procesów, aby spojrzeć na usługi działające w dwóch instancjach svchost ( technet.microsoft.com/en-us/sysinternals/processexplorer.aspx )
Yorik
@Yorik: Myślałem o tym, ale ProcessExplorer nie okazał się przydatny.
Violet Giraffe
5
W Windows 7 powiedziałbym, że obecnie> 90% problemów z procesorem svchost jest związanych z usługą Windows Update. Jeśli masz poważne problemy z aktualizacją systemu (co może być trudne przy nowej instalacji ze starym procesorem), spróbuj zainstalować KB3050265, KB3138612 i KB3145739 bez połączenia sieciowego. Następnie uruchom ponownie komputer i wyszukaj aktualizacje.
ontrack
@ontrack: Ciekawe. Właściwie myślę, że sprawdzanie aktualizacji jest wyłączone na tym komputerze, prawdopodobnie nigdy nie było aktualizowane od 2010 lub 2012 roku. I nie chcę instalować aktualizacji, muszę tylko naprawić problem z procesorem. Jeśli masz rację, czy po prostu wyłączysz usługę Windows Update?
Violet Giraffe
pytano tak wiele razy. patrz dup. Prawdopodobnie widzisz problem skanowania WU. Rozwiąż to z kroków w mojej odpowiedzi: superuser.com/a/996072/174557
magicandre1981

Odpowiedzi:

28

Jako instancja svchost.exe hostuje wiele usług systemowych, oto jak oddzielić usługi, każda do własnej instancji svchost.exe, aby dowiedzieć się, która usługa zużywa procesor.

Procedura jest następująca:

  1. Użyj Menedżera zadań, aby wyświetlić wszystkie procesy posortowane według malejącej liczby procesorów i zaznaczyć PID procesów, które zużywają procesor

  2. W wierszu polecenia (cmd) wprowadź polecenie
    Tasklist /svc /fi "IMAGENAME eq svchost.exe"
    wprowadź opis zdjęcia tutaj

  3. Problematyczne wystąpienia svchost.exe można teraz zlokalizować według ich identyfikatora PID, a po prawej stronie znajduje się lista usług systemowych, które obsługują

  4. Dla każdej z nazw na liście wprowadź następujące polecenie w wierszu polecenia (cmd), który jest uruchamiany jako administrator:
    sc config <name> type= own
    (Zwróć uwagę na spację między „=” a „własnym”)

  5. Restart

Oddzielone usługi systemowe będą teraz działać w osobnej instancji svchost.exe i będą widoczne w Menedżerze zadań na karcie Procesy. Możesz kliknąć instancję prawym przyciskiem myszy i wybrać opcję „Przejdź do usługi”, aby przejść bezpośrednio do usługi lub ponownie użyć polecenia tasklist.

Aby uzyskać więcej informacji, zobacz artykuł Microsoft
Pierwsze kroki z SVCHOST.EXE Rozwiązywanie problemów .

harrymc
źródło
7

Process Explorer ułatwia to. Potwierdziłem, że działa z Process Explorer v16.20 na 64-bitowym systemie Windows 7 Professional i 64-bitowym systemie Windows 10 Pro.

  1. Uruchom podwyższoną wersję Process Explorer.
  2. Znajdź svchost.exew CPUkolumnie proces o wysokiej (a nawet po prostu mierzalnej / niepustej) wartości . Pomocne może być sortowanie według kolumny Processlub CPU.
  3. Kliknij svchost.exeproces prawym przyciskiem myszy i wybierz Properties....
  4. W oknie właściwości procesu wybierz Threadskartę. Wszystkie wątki w tym procesie zostaną wyświetlone.
  5. Znajdź w CPUkolumnie wątek o wysokiej (lub ponownie mierzalnej / niepustej) wartości . Sortowanie według CPUkolumny może w tym pomóc.Karta Process Process wątków
  6. ServiceKolumna pokaże nazwę usługi, w którym ten wątek jest uruchomiony.

Jeśli nazwa usługi nie jest ci znana ...

  1. W oknie właściwości procesu wybierz Serviceskartę. Zostaną wyświetlone wszystkie usługi uruchomione w tym procesie.
  2. Dopasuj Servicekolumnę na Serviceskarcie do wartości Servicekolumny na Threadskarcie znajdującej się w kroku 6.Karta Usługi procesów Process Explorer
  3. Display NameKolumna wyświetli przyjazną nazwę usługi. Opis wybranej usługi pojawi się pod listą usług.
BOCZEK
źródło
Ach, nie wiedziałem o tych zaawansowanych funkcjach Process Explorer. Dzięki.
Violet Giraffe
3

Możesz użyć Menedżera zadań . Istnieją inne sposoby (wiersz poleceń, a nawet napisanie programu przy użyciu WinAPI ), ale nie będę ich tutaj omawiać. Zanim przejdziesz dalej, użytkownik powinien mieć uprawnienia administracyjne.

Na karcie Procesy :

  • Zaznacz opcję Pokaż procesy wszystkich użytkowników .
  • Kliknij prawym przyciskiem myszy na procesy „nagłówku tabeli” (która zawiera nazwy kolumn jak nazwa obrazu , PID , nazwy użytkownika , CPU , ...), a następnie wybierz Wybierz kolumny ... .
    • W wyskakującym oknie dialogowym przewiń w dół i upewnij się, że zaznaczyłeś Wiersz poleceń i PID (identyfikator procesu), a następnie naciśnij OK .
  • Wróć do zakładki Procesy , kliknij nagłówek kolumny procesora, aby procesy były uporządkowane według zużycia procesora (zwróć uwagę, że procesy mogą być wyświetlane w kolejności rosnącej / malejącej - każde kliknięcie CPU przełącza kolejność), klikaj, aż 2 procesy pojawiają się u góry tabeli. Teraz możesz zobaczyć ich linię poleceń (nie wiem, ale mam wrażenie, że jednym z nich jest netsvcs(Usługi sieciowe)), a także ich PID.

  • Następnie musisz dopasować 2 procesy do usług. W tym celu możesz:

    • Kliknij prawym przyciskiem myszy na nich i wtedy idź do usług (y) ... . Spowoduje to przejście do zakładki Usługi , z zaznaczoną całą usługą uruchomioną w tym procesie (dla tej opcji nie potrzebujesz żadnego z poprzednich kroków :)).
    • Otwórz przystawkę Usługi w mmc . Kiedy podwójne klikanie na usłudze (ma sens tylko sprawdzanie tych, które są uruchomione), w polu Ścieżka do pliku wykonywalnego możesz zobaczyć ich linię poleceń, na której powinieneś dopasować.
  • W W10 możesz wyświetlić dokładne informacje, których potrzebujesz, z Monitora zasobów (możesz uruchomić go z Menedżera zadań , zakładka Wydajność ). Tam przejdź do zakładki CPU , a usługi i zużycie procesora są wymienione.

EDYCJA 0 : Zaktualizowana odpowiedź, aby zapewnić prostsze (i bardziej sensowne) podejście, zamiast drapania mojej prawej głowy przy użyciu mojego stylu lewej ręki , który pierwotnie opublikowałem.

CristiFati
źródło
Nigdy nie zauważyłem, że widać wiersz poleceń, fajnie! Nie tak proste, jak odpowiedź Harrymca, ale dobrze wiedzieć.
Violet Giraffe
Menedżer zadań może to zrobić samodzielnie. Jeśli podczas przełączania na kartę Usługi zostanie wybrany proces svchost, zostaną tam wybrane usługi uruchomione w tym procesie.
Simon Richter,
1
Naprawdę? Na W10 tak się nie dzieje (przynajmniej gdy jest już wybrana usługa). Jedynym sposobem jest kliknięcie na proces, a następnie wybranie Idź do usług (opcji), które przegapiłem - najprawdopodobniej istnieje również w W7 ). Niestety nie jestem w stanie tego sprawdzić.
CristiFati,
1
@ CristiFati ta opcja istnieje od Windows Vista (źródło: technet.microsoft.com/en-us/library/ff642468.aspx ), prawdopodobnie powinieneś dodać ją do swojej odpowiedzi zamiast ręcznego dopasowania PID
Vasily Alexeev