Das hat mich immer gestört, deshalb frage ich die Server-Fehler-Community.
Ich mag den Process Explorer, weil er mehr als nur die übergeordneten Aufgaben im Task-Manager im Auge behält . Aber ich möchte ständig wissen, welcher dieser Dutzend Dienste, die in einem einzigen Prozess unter svchost gehostet werden, meinen Prozessor in die Höhe treibt .
Also ... gibt es eine nicht aufdringliche Möglichkeit, diese Informationen herauszufinden?
Ja, es gibt einen (fast) unaufdringlichen und einfachen Weg:
Teilen Sie jeden Dienst so auf, dass er in seinem eigenen SVCHOST.EXE-Prozess ausgeführt wird. Der Dienst, der die CPU-Zyklen beansprucht, wird im Prozess-Explorer leicht sichtbar (das Leerzeichen nach "=" ist erforderlich):
SC Config Servicename Type= own
Tun Sie dies in einem Befehlszeilenfenster oder fügen Sie es in ein BAT-Skript ein. Administratorrechte sind erforderlich und ein Neustart des Computers ist erforderlich, bevor er wirksam wird.
Der ursprüngliche Zustand kann wiederhergestellt werden durch:
SC Config Servicename Type= share
Beispiel: So führen Sie die Windows-Verwaltungsinstrumentation in einer separaten SVCHOST.EXE aus:
SC Config winmgmt Type= own
Diese Technik hat keine negativen Auswirkungen, es sei denn, Sie erhöhen den Speicherverbrauch geringfügig. Abgesehen von der Überwachung der CPU-Auslastung für jeden Dienst ist es auch einfach, das Delta der Seitenfehler, die Festplatten-E / A-Lesegeschwindigkeit und die Festplatten-E / A-Schreibgeschwindigkeit für jeden Dienst zu überwachen. Wählen Sie für den Prozess-Explorer das Menü Spalten anzeigen / auswählen: Registerkarte Prozessspeicher / Seitenfehler-Delta, Registerkarte Prozessleistung / E / A-Delta-Schreibbytes, Registerkarte Prozessleistung / E / A-Delta-Lesebytes.
Auf den meisten Systemen gibt es nur einen SVCHOST.EXE-Prozess mit vielen Diensten. Ich habe diese Sequenz verwendet (sie kann direkt in ein Befehlszeilenfenster eingefügt werden):
rem 1. "Automatic Updates"
SC Config wuauserv Type= own
rem 2. "COM+ Event System"
SC Config EventSystem Type= own
rem 3. "Computer Browser"
SC Config Browser Type= own
rem 4. "Cryptographic Services"
SC Config CryptSvc Type= own
rem 5. "Distributed Link Tracking"
SC Config TrkWks Type= own
rem 6. "Help and Support"
SC Config helpsvc Type= own
rem 7. "Logical Disk Manager"
SC Config dmserver Type= own
rem 8. "Network Connections"
SC Config Netman Type= own
rem 9. "Network Location Awareness"
SC Config NLA Type= own
rem 10. "Remote Access Connection Manager"
SC Config RasMan Type= own
rem 11. "Secondary Logon"
SC Config seclogon Type= own
rem 12. "Server"
SC Config lanmanserver Type= own
rem 13. "Shell Hardware Detection"
SC Config ShellHWDetection Type= own
rem 14. "System Event Notification"
SC Config SENS Type= own
rem 15. "System Restore Service"
SC Config srservice Type= own
rem 16. "Task Scheduler"
SC Config Schedule Type= own
rem 17. "Telephony"
SC Config TapiSrv Type= own
rem 18. "Terminal Services"
SC Config TermService Type= own
rem 19. "Themes"
SC Config Themes Type= own
rem 20. "Windows Audio"
SC Config AudioSrv Type= own
rem 21. "Windows Firewall/Internet Connection Sharing (ICS)"
SC Config SharedAccess Type= own
rem 22. "Windows Management Instrumentation"
SC Config winmgmt Type= own
rem 23. "Wireless Configuration"
SC Config WZCSVC Type= own
rem 24. "Workstation"
SC Config lanmanworkstation Type= own
rem End.
Auf dem Poster, das das PowerShell-Skript empfohlen hat: Ich habe es ausprobiert und alle meine Dienste erfolgreich geändert. Beim Neustart trat jedoch eine Fehlermeldung auf und ein Neustart wurde ausgelöst. Ich musste mit "Letzte gute Konfiguration" wiederherstellen. Achtung.
@ ChrisS: Diese sind in späteren Windows-Versionen vor Manipulationen geschützt. Ich denke, es ist wichtig in Windows XP ...
Tamara Wijsman
2
@ChrisS Danke für den Link zur Keep-Shared-Liste! Diese Seite scheint jetzt tot zu sein. Per Archiv lautete die Liste: HTTPFilter, KDC, Netlogon, NTLMssp, PolicyAgent, ProtectedStorage, SamSs, Eventlog, PlugPlay(alle assoziiert mit lsass.exe)
cxw
2
Ich kenne zwar keine einfache Möglichkeit, dies direkt zu tun, aber Sie können sie häufig von der Eigenschaftenseite des Prozess-Explorers für den Prozess svchost ableiten. Auf der Registerkarte Dienste in den Prozesseigenschaften sehen Sie, welche Dienste in diesem Prozess gehostet werden. Auf der Registerkarte Threads werden die ausgeführten Threads und Thread-Stacks sowie ihre CPU-Auslastung angezeigt. Häufig gibt die Startadresse im Thread einen Hinweis auf die Einstiegspunkt-DLL und damit auf den Dienst, der auf diesem Thread ausgeführt wird. In anderen Fällen können Sie sich den Thread-Aufrufstapel ansehen und den Modulnamen im Aufrufstapel sehen, der angibt, welcher Code ausgeführt wird.
Speichert Dienste, die den Prozess svchost.exe gemeinsam nutzen.
Konfiguriert Dienste so, dass sie in einem separaten Prozess ausgeführt werden. Nach dem Neustart wird jeder Dienst in einem separaten Prozess angezeigt.
Gibt alle in Schritt 1 gespeicherten Dienste an einen Prozess zurück.
Dmytro, wo kann ich erfahren, wie ich Ihr Service Disclosure-Tool verwende? Ich habe service_disclosure.exe unter Windows 7 heruntergeladen und ausgeführt. Kurz sah ich, dass ein schwarzes Befehlsfenster geöffnet und geschlossen wurde, aber es schien nichts mehr zu passieren. Das war beunruhigend! Ich möchte wissen, was es mit meinem Computer gemacht hat und wie man das Tool richtig benutzt.
Achtung: Bitte führen Sie die erforderlichen Recherche-, Wiederherstellungspunkt- und Sicherungsvorgänge durch, bevor Sie dies anwenden, und überprüfen Sie anschließend, ob alles noch funktioniert. Dies kann über die Wiederherstellungsumgebung nur auf Nicht-RAID-Systemen sowie im abgesicherten Modus sowohl auf RAID- als auch auf Nicht-RAID-Systemen wiederhergestellt werden. Dies wurde auf einem Entwicklercomputer getestet, nicht auf Servern.
In Powershell können Sie dies mit den folgenden Befehlen für alle nicht-lsass-Dienste ausführen:
Die Liste, die hier ausgeschlossen ist, muss mit Ausnahme von policyagent in einer gemeinsam genutzten lsass.exe ausgeführt werden , die für die ordnungsgemäße Kommunikation des Gruppenrichtlinienagenten während des Startvorgangs erforderlich ist.
Auch vor kurzem entdeckt , dass war (Process Activation) und w3svc (IIS World Wide Web) Notwendigkeit , ihre Prozesse zu teilen, so dass sie zu den Ausnahmen hinzugefügt wurden.
Dies hat unter Windows 10 (1607 Build 14.393,953) getestet worden, die Ausschlüsse sind unterschiedlich in XP, ... .
Ich weiß nicht, ob dies noch eine Frage ist, die Sie beantworten möchten, aber als ich den svchost-Fehler eines Kunden behebte, stellte ich fest, dass genau dafür eine Befehlszeile vorhanden ist: "tasklist / svc". Sie enthält eine vollständige Liste der ausgeführten Prozesse. mit der Prozess-ID und den Diensten, die jeder Prozess ausführt. Es gibt keine Prozessorauslastung, aber Sie können sie pro Prozess nach Prozess-ID schließen und feststellen, welche Gruppe von Diensten Ihre CPU verstopft.
Heutzutage können Sie mit PowerShell die Diensttypen in "Eigener Prozess" ändern und den Speicher für jeden einzeln anzeigen. Diese Liste zeigt den kompletten Code. Die zentrale Idee ist, den Servicetyp von der am wenigsten aufdringlichen auf die am meisten aufdringliche Weise zu ändern:
$win32Service =Get-CimInstance-ClassNameWin32_Service-Filter"Name = '$ServiceName'"-Verbose:$false
if($win32Service){if(!(Set-ServiceTypeToOwnProcessByCim $win32Service)){if(!(Set-ServiceTypeToOwnProcessByWindowsRegistry $win32Service)){if(Grant-FullControlRightsOnServiceRegistryKeyToCurrentUser $win32Service){Set-ServiceTypeToOwnProcessByWindowsRegistry $win32Service |Out-Null}}}}
else
{Write-Warning"[$ServiceName] Service not found"}
Wenn Sie die Dateien Set-ServiceTypeToOwnProcess.ps1und Enable-Privilege.ps1im selben Ordner ablegen, können Sie das Skript folgendermaßen ausführen:
HTTPFilter, KDC, Netlogon, NTLMssp, PolicyAgent, ProtectedStorage, SamSs, Eventlog, PlugPlay
(alle assoziiert mitlsass.exe
)Ich kenne zwar keine einfache Möglichkeit, dies direkt zu tun, aber Sie können sie häufig von der Eigenschaftenseite des Prozess-Explorers für den Prozess svchost ableiten. Auf der Registerkarte Dienste in den Prozesseigenschaften sehen Sie, welche Dienste in diesem Prozess gehostet werden. Auf der Registerkarte Threads werden die ausgeführten Threads und Thread-Stacks sowie ihre CPU-Auslastung angezeigt. Häufig gibt die Startadresse im Thread einen Hinweis auf die Einstiegspunkt-DLL und damit auf den Dienst, der auf diesem Thread ausgeführt wird. In anderen Fällen können Sie sich den Thread-Aufrufstapel ansehen und den Modulnamen im Aufrufstapel sehen, der angibt, welcher Code ausgeführt wird.
quelle
Probieren Sie das Service Disclosure Tool aus . Es:
Ihre Kommentare und Vorschläge sind willkommen.
@ Peter Mortensen: Danke für die Idee.
quelle
In Powershell können Sie dies mit den folgenden Befehlen für alle nicht-lsass-Dienste ausführen:
Die Liste, die hier ausgeschlossen ist, muss mit Ausnahme von policyagent in einer gemeinsam genutzten lsass.exe ausgeführt werden , die für die ordnungsgemäße Kommunikation des Gruppenrichtlinienagenten während des Startvorgangs erforderlich ist.
Auch vor kurzem entdeckt , dass war (Process Activation) und w3svc (IIS World Wide Web) Notwendigkeit , ihre Prozesse zu teilen, so dass sie zu den Ausnahmen hinzugefügt wurden.
Dies hat unter Windows 10 (1607 Build 14.393,953) getestet worden, die Ausschlüsse sind unterschiedlich in XP, ... .
quelle
Ich weiß nicht, ob dies noch eine Frage ist, die Sie beantworten möchten, aber als ich den svchost-Fehler eines Kunden behebte, stellte ich fest, dass genau dafür eine Befehlszeile vorhanden ist: "tasklist / svc". Sie enthält eine vollständige Liste der ausgeführten Prozesse. mit der Prozess-ID und den Diensten, die jeder Prozess ausführt. Es gibt keine Prozessorauslastung, aber Sie können sie pro Prozess nach Prozess-ID schließen und feststellen, welche Gruppe von Diensten Ihre CPU verstopft.
quelle
Heutzutage können Sie mit PowerShell die Diensttypen in "Eigener Prozess" ändern und den Speicher für jeden einzeln anzeigen. Diese Liste zeigt den kompletten Code. Die zentrale Idee ist, den Servicetyp von der am wenigsten aufdringlichen auf die am meisten aufdringliche Weise zu ändern:
Wenn Sie die Dateien
Set-ServiceTypeToOwnProcess.ps1
undEnable-Privilege.ps1
im selben Ordner ablegen, können Sie das Skript folgendermaßen ausführen:quelle