Frage Detaillierte Leistungsberichte für svchost.exe


Das ist etwas, was mich immer gestört hat, also werde ich die Community von Server Fault fragen.

ich liebe Process Explorer um mehr als nur die Aufgaben auf hoher Ebene im Auge zu behalten Taskmanager. Aber ich möchte ständig wissen, welche dieser Dutzend Dienste in einem einzigen Prozess untergestellt sind Svchost macht meine Prozessorspitze.

Also ... gibt es irgendeine nicht aufdringliche Art, diese Informationen zu finden?


19
2018-05-01 21:00


Ursprung




Antworten:


Ja, es gibt einen (fast) unaufdringlichen und einfachen Weg:

Teilen Sie jeden Dienst so auf, dass er in einem eigenen SVCHOST.EXE-Prozess ausgeführt wird der Service, der die CPU-Zyklen verbraucht, ist leicht sichtbar im Process Explorer (der Platz nach "=" ist erforderlich):

SC Config Servicename Type= own

Tun Sie dies in einem Befehlszeilenfenster oder fügen Sie es in einen BAT ein Skript. Administratorrechte sind erforderlich und ein Neustart des Computers ist erforderlich, bevor es dauert bewirken.

Der ursprüngliche Zustand kann wiederhergestellt werden durch:

SC Config Servicename Type= share

Beispiel: Windows Management Instrumentation in einem ausführen separate SVCHOST.EXE:

SC Config winmgmt Type= own

Diese Technik hat keine negativen Auswirkungen, außer vielleicht steigend Speicherverbrauch etwas. Und abgesehen von der Beobachtung der CPU Verwendung für jeden Dienst macht es auch einfach, Seite zu beobachten Fehler-Delta, Datenträger-E / A-Lesegeschwindigkeit und Datenträger-E / A-Schreibrate für jeder Service. Für Process Explorer, Menü Spalten anzeigen / auswählen:   Registerkarte Prozessspeicher / Seitenfehler Delta,   Registerkarte Prozessleistung / IO Delta Write Bytes,   Registerkarte Prozessleistung / IO Delta Read Bytes, beziehungsweise.


Auf den meisten Systemen gibt es nur einen SVCHOST.EXE-Prozess hat viele Dienstleistungen. Ich habe diese Sequenz benutzt (es kann sein direkt in ein Befehlszeilenfenster eingefügt):

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.

33
2018-06-02 11:01



Wow, tolle Lösung +1 - Matt Simmons
An das Poster, das das PowerShell-Skript empfohlen hat: Ich habe es ausprobiert und alle meine Dienste erfolgreich geändert. Nach dem Neustart tauchte jedoch ein Fehlerfeld auf und ein Neustart wurde ausgelöst. Ich musste mit 'letzte gute Konfiguration' wiederherstellen. Achtung. - user42670
Jelle Freson wollte hinzufügen Diese Liste von Diensten, die geteilt werden sollen. - Chris S
@ChrisS: Diese sind in späteren Windows-Versionen vor Manipulation geschützt. Ich denke, es ist wichtig in Windows XP, obwohl ... - Tom Wijsman
@ChrisS Danke für den Link zur Keep-Shared-Liste! Diese Seite scheint jetzt tot zu sein. Pro Archiv, die Liste war: HTTPFilter, KDC, Netlogon, NTLMssp, PolicyAgent, ProtectedStorage, SamSs, Eventlog, PlugPlay (alle verbunden mit lsass.exe) - cxw


Obwohl ich keine einfache Möglichkeit kenne, dies direkt zu tun, können Sie dies oft auf der Eigenschaftenseite Process Explorer für den svchost-Prozess ableiten. Auf der Registerkarte Dienste in den Prozesseigenschaften erfahren Sie, welche Dienste in diesem Prozess gehostet werden. Auf der Registerkarte "Threads" werden die ausgeführten Threads und Thread-Stacks sowie deren CPU-Auslastung angezeigt. Oft gibt die Startadresse des Threads 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-Callstack ansehen und sehen den Modulnamen im Call-Stack, der Ihnen sagt, welcher Codeabschnitt gerade ausgeführt wird.


2
2018-05-01 21:38





Versuchen Diensthinweis-Tool. Es:

  1. Speichert Dienste, die den Prozess svchost.exe gemeinsam nutzen.
  2. Konfiguriert Dienste so, dass sie in einem separaten Prozess ausgeführt werden. Nach dem Neustart sehen Sie jeden Dienst in einem separaten Prozess.
  3. Gibt alle in Schritt # 1 gespeicherten Dienste an einen Prozess zurück.

Ihre Kommentare und Vorschläge sind willkommen.

@Peter Mortensen: Danke für die Idee.


1
2018-02-24 17:36



Dmytro, wo kann ich lernen, wie Sie Ihr Service Disclosure-Tool verwenden? Ich habe heruntergeladen und führte service_disclosure.exe auf Windows 7. Kurz sah ich ein schwarzes Fenster öffnen und schließen, aber nichts schien mehr zu passieren. Das war beunruhigend! Ich würde gerne wissen, was es mit meinem Computer gemacht hat und wie man das Werkzeug richtig benutzt. - DeveloperDan
Hallo Dan. Bitte beachten Sie diese Schritt-für-Schritt-Anleitung (sourceforge.net/p/svcdisclosr/wiki/Home) - Dmytro Ovdiienko


Vorsicht: Bitte führen Sie die notwendigen Nachforschungen, Wiederherstellungspunkte und Backup-Prozeduren durch, bevor Sie dies anwenden, und überprüfen Sie, ob alles noch funktioniert. Es ist möglich, nur über Nicht-RAID-Systeme über die Wiederherstellungsumgebung und auf RAID- und Nicht-RAID-Systemen den abgesicherten Modus wiederherzustellen. Dies wurde auf einem Entwicklungscomputer getestet, nicht auf Servern.

In Powershell können Sie dies mit den folgenden Befehlen für alle Nicht-LSASS-Dienste tun:

Get-Service | ForEach-Object `
    { SC.EXE config $_.Name type= own }
ForEach ($svc in @("efs", "keyiso", "netlogon", "policyagent", "samss", "vaultsvc", `
    "was", "w3svc")) `
    { SC.EXE config $svc type= share }

Die Liste, die hier ausgeschlossen ist, muss in einer gemeinsamen lsass.exe ausgeführt werden, mit Ausnahme von Politikagent, die erforderlich sind, damit der Gruppenrichtlinienagent während des Starts ordnungsgemäß kommuniziert.

Auch kürzlich entdeckt, dass war (Prozessaktivierung) und w3svc (IIS World Wide Web) müssen ihre Prozesse freigeben, sodass sie zu den Ausschlüssen hinzugefügt wurden.

Dies wurde unter Windows 10 (1607, Build 14393.953) getestet, die Ausschlüsse sind anders in XP, ....


1
2018-03-22 00:37





Ich weiß nicht, ob das immer noch eine Frage ist, die du beantworten willst, aber während der Fehlerbehebung eines Kunden svchost Fehler, habe ich gelernt, dass es eine Befehlszeile für genau dies gibt: "tasklist / svc" Es gibt eine vollständige Liste der laufenden Prozesse, mit der Prozess-ID und den Diensten läuft jeder Prozess. Es gibt keine Prozessornutzung, aber Sie können sie einen Prozess nach der anderen durch Prozess-ID schließen und lernen, welche Gruppe von Diensten Ihre CPU blockiert.


0
2018-06-01 16:04





Heutzutage können Sie mit PowerShell die Diensttypen in "Own Process" ändern und den Speicher für jeden einzeln anzeigen. Dieser Gist Zeigen Sie den vollständigen Code. Die zentrale Idee ist, den Servicetyp von der am wenigsten aufdringlichsten zu der aufdringlichsten Art zu ändern:

$win32Service = Get-CimInstance -ClassName Win32_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"
}

Beim setzen der Set-ServiceTypeToOwnProcess.ps1 und Enable-Privilege.ps1 Dateien im selben Ordner können Sie das Skript wie folgt ausführen:

.\Set-ServiceTypeToOwnProcess.ps1 -ServiceName 'Appinfo', 'gpsvc', 'Schedule', 'SENS', 'SessionEnv', 'wuauserv'

0
2018-03-18 01:42