Wie kann ich eine abnormale CPU-Auslastung durch svchost.exe diagnostizieren? [Duplikat]

19

Ich habe einen Laptop mit einem 32-Bit-System von Win 7, das von einem Pentium mit zwei Kernen angetrieben wird (es ist ein Laptop von 2010). Manchmal funktioniert es gut, aber normalerweise ist es bei 100% CPU-Auslastung im Leerlauf. Die CPU wird von zwei svchost.exe-Prozessen belegt (jeweils 50%). Soweit ich weiß, ist dies ein Service-Host. Gibt es eine Möglichkeit, herauszufinden, welcher Dienst der Schuldige ist?

Bemerkenswert: Dies geschieht auch im abgesicherten Modus.

Violette Giraffe
quelle
1
Mit dem Prozess-Explorer können Sie die Dienste anzeigen, die unter den beiden Instanzen von svchost ( technet.microsoft.com/en-us/sysinternals/processexplorer.aspx )
Yorik
@Yorik: Daran habe ich gedacht, aber ProcessExplorer hat nichts gezeigt.
Violet Giraffe
5
In Windows 7 würde ich sagen, dass derzeit> 90% der Probleme mit der svchost-CPU mit dem Windows Update-Dienst zusammenhängen. Wenn Sie Probleme haben, ein System auf den neuesten Stand zu bringen (was bei einer Neuinstallation mit einem alten Prozessor schwierig sein kann), versuchen Sie, KB3050265, KB3138612 und KB3145739 ohne Netzwerkverbindung zu installieren. Starten Sie dann neu und suchen Sie nach Updates.
Ontrack
@ontrack: Interessant. Eigentlich denke ich, dass die Suche nach Updates auf diesem Computer deaktiviert ist. Sie wurde wahrscheinlich seit 2010 oder 2012 nicht mehr aktualisiert. Und ich habe keine Lust, Updates zu installieren. Ich muss nur das CPU-Problem beheben. Wenn Sie Recht haben, hilft es dann einfach, den Windows Update-Dienst zu deaktivieren?
Violette Giraffe
das wurde so oft gefragt. siehe dup. Sie sehen wahrscheinlich das Problem mit der WU-Prüfung. Lösen Sie es aus den Schritten in meiner Antwort: superuser.com/a/996072/174557
magicandre1981

Antworten:

28

Da eine Instanz von svchost.exe mehrere Systemdienste hostet, können Sie die Dienste wie folgt in eine eigene Instanz von svchost.exe unterteilen, um herauszufinden, welcher Dienst die CPU beansprucht.

Die Vorgehensweise ist wie folgt:

  1. Verwenden Sie den Task-Manager, um alle Prozesse in absteigender Reihenfolge nach CPU zu sortieren, und markieren Sie die PID der Prozesse, die die CPU verbrauchen

  2. Geben Sie in einer Eingabeaufforderung (cmd) den Befehl ein
    Tasklist /svc /fi "IMAGENAME eq svchost.exe"
    Bildbeschreibung hier eingeben

  3. Die problematischen Instanzen von svchost.exe können nun anhand ihrer PID gefunden werden. Auf der rechten Seite finden Sie eine Liste der von ihnen gehosteten Systemdienste

  4. Geben Sie für jeden Namen in der Liste den folgenden Befehl in einer Eingabeaufforderung (cmd) ein, die als Administrator ausgeführt wird:
    sc config <name> type= own
    (Beachten Sie das Leerzeichen zwischen '=' und 'own')

  5. Starten Sie neu

Die von Ihnen getrennten Systemdienste werden nun jeweils in einer eigenen Instanz von svchost.exe ausgeführt und können im Task-Manager auf der Registerkarte "Prozesse" angezeigt werden. Sie können mit der rechten Maustaste auf eine Instanz klicken und "Gehe zu Dienst (en)" auswählen, um direkt zum Dienst zu gelangen, oder den Befehl "Jobliste" erneut verwenden.

Weitere Informationen finden Sie im Microsoft-Artikel
Erste Schritte mit SVCHOST.EXE .

Harrymc
quelle
7

Mit Process Explorer ist das ganz einfach. Ich habe bestätigt, dass dies mit Process Explorer v16.20 unter 64-Bit Windows 7 Professional und 64-Bit Windows 10 Pro funktioniert.

  1. Führen Sie Process Explorer mit erhöhten Rechten aus.
  2. Suchen Sie einen svchost.exeProzess mit einem hohen (oder sogar nur messbaren / nicht leeren) Wert in der CPUSpalte. Hierbei kann das Sortieren nach der Spalte Processoder CPUhilfreich sein.
  3. Klicken Sie mit der rechten Maustaste auf den svchost.exeProzess und wählen Sie Properties....
  4. Wählen Sie im Fenster Prozesseigenschaften die ThreadsRegisterkarte aus. Alle Threads in diesem Prozess werden angezeigt.
  5. Suchen Sie einen Thread mit einem hohen (oder auch nur messbaren / nicht leeren) Wert in der CPUSpalte. CPUHierbei kann das Sortieren nach der Spalte hilfreich sein.Registerkarte Prozess-Explorer-Prozess-Threads
  6. In der ServiceSpalte wird der Name des Dienstes angezeigt, in dem dieser Thread ausgeführt wird.

Wenn Ihnen der Servicename nicht bekannt ist ...

  1. Wählen Sie im Fenster Prozesseigenschaften die ServicesRegisterkarte aus. Alle Dienste, die in diesem Prozess ausgeführt werden, werden angezeigt.
  2. Passen Sie die ServiceSpalte auf der ServicesRegisterkarte an den Wert der ServiceSpalte auf der ThreadsRegisterkarte an, die Sie in Schritt 6 gefunden haben.Registerkarte "Process Explorer-Prozessdienste"
  3. In der Display NameSpalte wird der Anzeigename des Dienstes angezeigt. Die Beschreibung des ausgewählten Dienstes wird unter der Liste der Dienste angezeigt.
SPECK
quelle
Ich wusste nichts über die erweiterten Funktionen von Process Explorer. Vielen Dank.
Violette Giraffe
3

Sie können den Task-Manager verwenden . Es gibt andere Möglichkeiten (Befehlszeile oder sogar ein Programm mit WinAPI schreiben ), aber ich werde sie hier nicht diskutieren. Bevor Sie fortfahren, sollte Ihr Benutzer über Administratorrechte verfügen.

Auf der Registerkarte Prozesse :

  • Aktivieren Sie Prozesse aller Benutzer anzeigen .
  • Klicken Sie mit der rechten Maustaste auf den "Tabellenkopf" der Prozesse (der Spaltennamen wie Bildname , PID , Benutzername , CPU , ... enthält) und wählen Sie Spalten auswählen ... aus .
    • Scrollen Sie im daraufhin angezeigten Dialogfeld nach unten, und überprüfen Sie, ob Sie die Befehlszeile und die PID (Process Identifier) überprüft haben. Drücken Sie anschließend auf OK .
  • Klicken Sie auf der Registerkarte " Prozesse" auf die Spaltenüberschrift " CPU" , damit die Prozesse nach ihrem CPU-Verbrauch sortiert werden (beachten Sie, dass die Prozesse möglicherweise in aufsteigender / absteigender Reihenfolge angezeigt werden - bei jedem Klick auf " CPU" wird die Reihenfolge geändert ). Klicken Sie auf, bis die beiden Prozesse angezeigt werden erscheinen am oberen Rand der Tabelle. Jetzt können Sie ihre Befehlszeile (ich weiß nicht, aber ich habe das Gefühl, dass eine von ihnen netsvcs(Netzwerkdienste) ist) und auch ihre PIDs sehen.

  • Als Nächstes müssen Sie die beiden Prozesse den Diensten zuordnen. Dafür können Sie entweder:

    • Rechtsklick auf sie und dann Zum Service (s) ... . Dies wechselt zur Registerkarte Dienste , auf der alle Dienste ausgewählt sind, die in diesem Prozess ausgeführt werden (für diese Option ist keiner der vorherigen Schritte erforderlich :)).
    • Öffnen Sie das Dienste- Snapin in mmc . Wenn Sie auf einen Dienst doppelklicken (es ist nur sinnvoll, die ausgeführten zu überprüfen), können Sie unter Pfad zur ausführbaren Datei deren Befehlszeile anzeigen, auf der Sie den Abgleich durchführen sollten.
  • Auf W10 können Sie die genaue Informationen , die Sie von benötigen sehen Ressourcenmonitor (können Sie es aus starten Task - Manager , Performance - Register). Dort gehen Sie zur Registerkarte CPU und die Dienste und deren CPU-Verbrauch werden aufgelistet.

EDIT0 : Die Antwort wurde aktualisiert, um einen einfacheren (und sinnvolleren) Ansatz zu bieten, anstatt meine rechte Kopfseite mit der von mir ursprünglich geposteten linken Hand zu kratzen .

CristiFati
quelle
Ich habe nie bemerkt, dass Sie die Befehlszeile sehen können, ordentlich! Nicht so einfach wie Harrymcs Antwort, aber gut zu wissen.
Violet Giraffe
Der Task-Manager kann dies alleine tun. Wenn beim Wechseln zur Registerkarte Dienste ein Svchost-Prozess ausgewählt wird, werden die Dienste, die in diesem Prozess ausgeführt werden, dort ausgewählt.
Simon Richter
1
"Ja wirklich?" Auf W10 passiert dies nicht (zumindest wenn bereits ein Dienst ausgewählt ist). Der einzige Weg ist , auf den Prozess zu klicken und dann Gehe zu Service (s) zu wählen (Option, die ich verpasst habe - höchstwahrscheinlich auch in W7 vorhanden ). Leider kann ich nicht überprüfen.
CristiFati
1
@CristiFati Diese Option gibt es seit Windows Vista (Quelle: technet.microsoft.com/en-us/library/ff642468.aspx ). Sie sollten sie wahrscheinlich zu Ihrer Antwort hinzufügen, anstatt die PID manuell abzugleichen.
Vasily Alexeev