Jak znaleźć wykorzystanie pamięci przez poszczególne usługi Windows?

42

Menedżer zadań pokazuje ogólne użycie pamięci svchost.exe. Czy istnieje sposób na sprawdzenie wykorzystania pamięci przez poszczególne usługi?


Uwaga: jest to podobne do raportowania wydajności Finegrained na svchost.exe

Aidan Ryan
źródło
1
Dla każdego (takiego jak ja) mającego ten sam problem: - Menedżer zadań Windows -> Wydajność (karta) -> Monitor zasobów (przycisk) - I dostajesz svchost.exe podzielony według usługi W systemie Windows 7
Oliver
1
@Oliver Resource Monitor pokazuje procesor na usługę, ale to pytanie dotyczy pamięci.
Aidan Ryan
Możesz zobaczyć skrypt sprawdzający pamięć poszczególnych usług w tej odpowiedzi SO .
Rosberg Linhares
@RosbergLinhares ten skrypt jest równoważny skryptowi PeterMortensena
Aidan Ryan
@AidanRyan, dla mnie skrypt PeterMortensen nie działał z usługami Schedule i gpsvc.
Rosberg Linhares

Odpowiedzi:

51

Istnieje prosty sposób na uzyskanie wymaganych informacji (ale wymaga niewielkiej zmiany w systemie):

Podziel każdą usługę, aby działała we własnym procesie SVCHOST.EXE, a usługa wykorzystująca cykle procesora będzie łatwo widoczna w Menedżerze zadań lub Eksploratorze procesów (wymagane jest miejsce po „=”):

SC Config Servicename Type= own

Zrób to w oknie wiersza poleceń lub umieść w skrypcie BAT. Wymagane są uprawnienia administracyjne, a przed wejściem w życie wymagane jest ponowne uruchomienie komputera.

Stan pierwotny można przywrócić poprzez:

SC Config Servicename Type= share

Przykład: aby uruchomić Instrumentację zarządzania Windows w osobnym pliku SVCHOST.EXE:

SC Config winmgmt Type= own

Ta technika nie ma żadnych złych skutków, z wyjątkiem być może nieznacznego zwiększenia zużycia pamięci. Poza obserwowaniem użycia procesora dla każdej usługi, ułatwia także obserwowanie delty błędów strony, szybkości odczytu we / wy dysku i prędkości zapisu we / wy dysku dla każdej usługi. W Eksploratorze procesów, menu Widok / Wybierz kolumny: zakładka Pamięć procesu / Delta błędu strony, zakładka Wydajność procesu / Bajty zapisu Delta IO, zakładka Wydajność procesu / Bajty odczytu Delta IO.


W większości systemów jest tylko jeden proces SVCHOST.EXE, który ma wiele usług. Użyłem tej sekwencji (można ją wkleić bezpośrednio w oknie wiersza poleceń):

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
źródło
12
Dla użytkowników PowerShell: Get-Service | ForEach-Object {C: \ Windows \ System32 \ SC.EXE config $ _. Nazwa type = own}
Tamara Wijsman
1
Właściwie zazwyczaj zauważam 3 lub 4 wystąpienia svchost.exew systemach Windows XP. Na tym widzę 6.
SamB
4
@TomWij: Zachowaj szczególną ostrożność podczas korzystania z tego fragmentu kodu - jeśli używasz EFS (Encrypting File System) i ustaw go type= own, może on nie działać poprawnie i pozostaniesz bez dostępu do plików zaszyfrowanych za jego pomocą (które mogą bądź katastrofalny, jeśli pliki systemu operacyjnego są zaszyfrowane!)
Beau,
@ Beau: Czy wiesz, dlaczego wprost?
Tamara Wijsman,
2
@Peter Mortensen: Stworzyłem narzędzie do ujawniania usług . 1. Przechowuje usługi współdzielące proces svchost.exe. 2. Konfiguruje usługi do uruchamiania w osobnym procesie. 3. Przywraca wszystkie usługi zapisane w kroku 1 z powrotem do jednego procesu. Twoje komentarze i sugestie są mile widziane. Dzięki za pomysł.
Dmytro Ovdiienko
18

Możesz użyć wbudowanego tasklistpolecenia i filtrować według nazwy usługi ( /fiprzełącznika), na przykład:

 tasklist /fi "services eq TermService"

Wynik:

Nazwa obrazu Nazwa sesji PID Sesja nr Wykorzystanie pamięci
========================= ======== ================ = ========== ============
svchost.exe 2940 Konsola 0 7.096 K.

Jeśli nie znasz nazwy, możesz je wymienić, uruchamiając tę ​​instrukcję:

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

Zawiera listę wszystkich usług hostowanych przez svchost.exe, na przykład:

Nazwa obrazu Usługi PID
========================= ======== ================= ===========================
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, helpvc,
                                   lanmanserver, lanmanworkstation, 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

Usługi niekoniecznie są hostowane przez svchost.exe. Jeśli więc nie możesz znaleźć usługi filtrującej według nazwy pliku wykonawczego, po prostu uruchom tasklist /svc. Pokaże wszystkie usługi.

splattne
źródło
6
Wydaje się, że nie pokazuje to pamięci używanej przez pojedynczą usługę, zgodnie z żądaniem w pytaniu.
Duncan Jones
9

Eksplorator procesów rzeczywiście pokaże indywidualne użycie pamięci w svchost Upewnij się, że masz najnowszą wersję stąd http://technet.microsoft.com/en-us/sysinternals/bb896653

Uruchom Eksploratora procesów jako administrator, kliknij svchost, który chcesz sprawdzić, kliknij View DLLsprzycisk (lub CTRL+D). Kliknij prawym przyciskiem myszy nagłówki w oknie bibliotek DLL Select Columns..., a następnie zaznacz WS Total Bytesi naciśnij OK.

Teraz możesz przeglądać i sortować wykorzystanie pamięci przez poszczególne usługi (realizowane przez biblioteki dll) w svchost.

Chris T.
źródło
4
Nie pokazuje wielkości sterty.
Der_Meister
7

Podczas gdy Process Monitor to narzędzie ogólnego zastosowania (które zrobi wszystko oprócz zmywania naczyń dla Ciebie), w tym konkretnym pytaniu chcesz użyć VMMap (inne narzędzie SysInternals)

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

VMMap to narzędzie do analizy pamięci wirtualnej i fizycznej. Pokazuje rozkład typów pamięci wirtualnej zatwierdzonych przez proces, a także ilość pamięci fizycznej (zestawu roboczego) przypisanego przez system operacyjny do tych typów. Oprócz graficznych reprezentacji wykorzystania pamięci, VMMap pokazuje również informacje podsumowujące i szczegółową mapę pamięci procesu. Wydajne funkcje filtrowania i odświeżania pozwalają zidentyfikować źródła wykorzystania pamięci procesowej i koszt pamięci funkcji aplikacji.

Oprócz elastycznych widoków do analizy procesów na żywo, VMMap obsługuje eksport danych w wielu formach, w tym format macierzysty, który zachowuje wszystkie informacje, aby można było je ponownie załadować. Zawiera również opcje wiersza poleceń, które umożliwiają scenariusze skryptowe.

Sean Earp
źródło
5
Chłodny! Czy jest teraz sposób, aby prześledzić użycie bloku pamięci sterty dla poszczególnych usług, które są jego właścicielem?
Aidan Ryan
3

Dostaje się to do obszaru przepełnienia stosu, ale jeśli możesz zdobyć statystyki pamięci dla wątku, możesz być w stanie z grubsza skorelować to z dllami poszczególnych usług, dopasowując je do dllów wymienionych na stosie wątków. Jednak zdecydowanie za dużo dla mojego maleńkiego mózgu sysadmin.

użytkownik2278
źródło
2

Udzielam odpowiedzi Peter Mortensen. Przed zmodyfikowaniem rodzaju usług sprawdź istniejący typ za pomocą polecenia:

sc query wuauserv

Które wygenerują następujące:

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

Każdy typ inny niż „10 WIN32_OWN_PROCESS”, „20 WIN32_SHARE_PROCESS” nie powinien być modyfikowany.

sken130
źródło
1

Rozdzielenie usług jest poprawną odpowiedzią, ale polecenie sc config nie działało dla mnie (2008 R2).

Można to jednak zrobić za pośrednictwem rejestru, co oznacza ustawienie parametru „Typ” na 0x00000010 (dec. 16):

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

Uważaj jednak, którą usługę chcesz zmodyfikować, oprócz „własnych” i „udostępnionych” istnieją specjalne typy, których nie należy zmieniać, takie jak:

  • jądro
  • filesys
  • rec
  • przystosować się

Następnie po prostu uruchom ponownie usługę i powinieneś zobaczyć w ProcessExplorer, że ma teraz swój własny proces svchost.exe.

Michael Böckling
źródło