Wie finde ich die Speichernutzung einzelner Windows-Dienste?

42

Der Task-Manager zeigt die Gesamtspeicherauslastung von svchost.exe an. Gibt es eine Möglichkeit, die Speichernutzung einzelner Dienste anzuzeigen?


Beachten Sie, dass dies der Leistungsberichterstattung von Finegrained für svchost.exe ähnelt

Aidan Ryan
quelle
1
Für alle (wie ich), die das gleiche Problem haben: - Windows Task-Manager -> Leistung (Registerkarte) -> Ressourcenmonitor (Schaltfläche) - Und Sie erhalten svchost.exe nach Dienst aufgeteilt Unter Windows 7
Oliver
1
@Oliver Resource Monitor zeigt die CPU pro Dienst an, aber diese Frage bezieht sich auf den Arbeitsspeicher.
Aidan Ryan
In dieser SO-Antwort sehen Sie ein Skript zum Überprüfen des Speichers einzelner Dienste .
Rosberg Linhares
@RosbergLinhares Dieses Skript entspricht PeterMortensens
Aidan Ryan
@AidanRyan, für mich funktionierte das Skript von PeterMortensen nicht mit den Diensten Schedule und gpsvc.
Rosberg Linhares

Antworten:

51

Es gibt eine einfache Möglichkeit, die von Ihnen gewünschten Informationen abzurufen (dies erfordert jedoch eine geringfügige Änderung an Ihrem System):

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 Task-Manager oder 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 Lese- und Schreibrate der Festplatten-E / A 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.
Peter Mortensen
quelle
12
Für die PowerShell-Benutzer da draußen: Get-Service | Für jedes Objekt {C: \ Windows \ System32 \ SC.EXE config $ _. Name type = own}
Tamara Wijsman
1
Tatsächlich stelle ich normalerweise 3 oder 4 Instanzen svchost.exeauf Windows XP-Systemen fest. Auf diesem sehe ich 6.
SamB
4
@TomWij: Seien Sie äußerst vorsichtig, wenn Sie dieses Snippet verwenden - wenn Sie EFS (Encrypting File System) verwenden und es so einstellen, type= ownfunktioniert es möglicherweise nicht richtig, und Sie haben keinen Zugriff auf Dateien, die mit diesem Snippet verschlüsselt sind (was auch möglich ist) katastrophal sein, wenn die OS-Dateien verschlüsselt sind!)
Beau
@Beau: Weißt du warum explizit?
Tamara Wijsman
2
@ Peter Mortensen: Ich habe ein Tool zur Offenlegung von Diensten erstellt . Es 1. Speichert Dienste, die svchost.exe Prozess teilen. 2. Konfiguriert Dienste so, dass sie in einem separaten Prozess ausgeführt werden. 3. Sendet alle in Schritt 1 gespeicherten Dienste an einen Prozess zurück. Ihre Kommentare und Vorschläge sind willkommen. Danke für die Idee.
Dmytro Ovdiienko
18

Sie können den integrierten tasklistBefehl verwenden und nach Dienstnamen filtern ( /fiSchalter), zum Beispiel:

 tasklist /fi "services eq TermService"

Ausgabe:

Bildname PID-Sitzungsname Sitzungsnummer Verwendung
================================================= =====================
svchost.exe 2940 Console 0 7.096 K

Wenn Sie keinen Namen kennen, können Sie diese mit der folgenden Anweisung auflisten:

 tasklist /svc /fi "imagename eq svchost.exe"

Es listet alle von svchost.exe gehosteten Dienste auf, zum Beispiel:

PID-Dienste für Bildnamen
================================================ =========================
svchost.exe 632 DcomLaunch
svchost.exe 684 RpcSs
svchost.exe 748 Dhcp, Dnscache
svchost.exe 788 LmHosts, W32Time
svchost.exe 804 AeLookupSvc, AudioSrv, Browser, CryptSvc,
                                   dmserver, EventSystem, helpsvc,
                                   LANMAN-Server, LANMAN-Workstation, Messenger,
                                   Netman, Nla, RasMan, Schedule, Seclogon,
                                   SENS, ShellHWDetection, TrkWks, winmgmt,
                                   wuauserv, WZCSVC
svchost.exe 1140 ERSvc
svchost.exe 1712 RemoteRegistry
svchost.exe 196 W3SVC
svchost.exe 2940 TermService
svchost.exe 2420 TapiSrv

Services werden nicht unbedingt von gehostet svchost.exe. Wenn Sie also keinen Dienst finden, der nach dem Namen der ausgeführten Datei filtert, führen Sie ihn einfach aus tasklist /svc. Es werden alle Dienste angezeigt.

splattne
quelle
6
Dies scheint nicht den von einem einzelnen Dienst verwendeten Speicher anzuzeigen, wie in der Frage angefordert.
Duncan Jones
9

Der Prozess-Explorer zeigt in der Tat die individuelle Speichernutzung in svchost an. Stellen Sie sicher, dass Sie die neueste Version von hier haben: http://technet.microsoft.com/en-us/sysinternals/bb896653

Stellen Sie sicher, dass Sie den Prozess-Explorer als Administrator ausführen, klicken Sie auf den zu untersuchenden svchost und dann auf die View DLLsSchaltfläche (oder CTRL+D). Klicken Sie mit der rechten Maustaste auf die Überschriften im DLLs-Fenster, Select Columns...überprüfen Sie sie WS Total Bytesund drücken Sie OK.

Jetzt können Sie die Speichernutzung einzelner Dienste (von DLLs implementiert) im svchost anzeigen und sortieren.

Chris T.
quelle
4
Die Größe des Heapspeichers wird nicht angezeigt.
Der_Meister
7

Während Process Monitor ein Allzweck-Dienstprogramm ist (das alles außer Geschirr spült), möchten Sie für diese spezielle Frage VMMap (ein anderes SysInternals-Dienstprogramm) verwenden.

http://technet.microsoft.com/en-us/sysinternals/dd535533.aspx

VMMap ist ein Dienstprogramm zur Analyse des virtuellen und physischen Arbeitsspeichers. Es zeigt eine Aufschlüsselung der festgeschriebenen virtuellen Speichertypen eines Prozesses sowie die Größe des physischen Speichers (Arbeitssatz), der diesen Typen vom Betriebssystem zugewiesen wurde. Neben grafischen Darstellungen der Speichernutzung zeigt VMMap auch zusammenfassende Informationen und eine detaillierte Prozessspeicherzuordnung. Mithilfe leistungsstarker Filter- und Aktualisierungsfunktionen können Sie die Ursachen für die Verwendung des Prozessspeichers und die Speicherkosten der Anwendungsfunktionen ermitteln.

Neben flexiblen Ansichten zum Analysieren von Live-Prozessen unterstützt VMMap den Export von Daten in mehreren Formularen, einschließlich eines nativen Formats, das alle Informationen beibehält, damit Sie sie erneut laden können. Es enthält auch Befehlszeilenoptionen, die Skriptszenarien ermöglichen.

Sean Earp
quelle
5
Cool! Gibt es nun eine Möglichkeit, die Verwendung eines Heapspeicherblocks für den jeweiligen Dienst nachzuverfolgen, dessen Eigentümer er ist?
Aidan Ryan
3

Dies dringt in das Gebiet des Stapelüberlaufs vor, aber wenn Sie die Speicherstatistiken pro Thread abrufen können, können Sie diese möglicherweise grob mit den einzelnen Dienst-DLLs korrelieren, indem Sie sie mit den im Thread-Stapel aufgelisteten DLLs abgleichen. Allerdings viel zu viel für mein kleines Sysadmin-Gehirn.

user2278
quelle
2

Ich erweitere hier die Antwort von Peter Mortensen. Bevor Sie die Art der Dienste ändern, überprüfen Sie bitte die vorhandene Art durch Befehl wie:

sc query wuauserv

Welches wird das Folgende ausgeben:

    TYPE               : 20  WIN32_SHARE_PROCESS
    STATE              : 1  STOPPED
    WIN32_EXIT_CODE    : 0  (0x0)
    SERVICE_EXIT_CODE  : 0  (0x0)
    CHECKPOINT         : 0x0
    WAIT_HINT          : 0x0

Andere Typen als "10 WIN32_OWN_PROCESS", "20 WIN32_SHARE_PROCESS" sollten nicht geändert werden.

sken130
quelle
1

Die Trennung der Dienste ist die richtige Antwort, aber der Befehl sc config hat bei mir nicht funktioniert (2008 R2).

Sie können dies jedoch über die Registrierung tun, was bedeutet, dass der Parameter "Type" auf 0x00000010 (Dez. 16) gesetzt wird:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\<ServiceName>\Type

Achten Sie jedoch darauf, welchen Dienst Sie ändern möchten. Neben "own" und "share" gibt es spezielle Typen, die nicht geändert werden sollten, z.

  • Kernel
  • filesys
  • rec
  • anpassen

Danach starten Sie den Dienst einfach neu und Sie sollten im ProcessExplorer sehen, dass er jetzt einen eigenen Prozess svchost.exe hat.

Michael Böckling
quelle