Finegrained raportowanie wydajności na svchost.exe
20
To zawsze mnie niepokoiło, więc zapytam społeczność Server Fault.
Uwielbiam Process Explorer do śledzenia nie tylko zadań wysokiego poziomu, które otrzymujesz w Menedżerze zadań . Ale ciągle chcę wiedzieć, która z tych kilkunastu usług hostowanych w jednym procesie pod svchost powoduje wzrost wydajności mojego procesora.
Więc ... czy jest jakiś nieinwazyjny sposób na znalezienie tych informacji?
Tak, istnieje (prawie) nieinwazyjny i łatwy sposób:
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 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.
Do plakatu, który zalecał skrypt PowerShell: wypróbowałem go i pomyślnie zmieniłem wszystkie moje usługi. Jednak po ponownym uruchomieniu pojawiło się okno błędu i uruchomiono restart. Musiałem przywrócić z „ostatnią dobrą konfiguracją”. Bądź ostrożny.
@ChrisS: Są one chronione przed manipulacją w późniejszych wersjach systemu Windows; Wydaje mi się, że to ważne w Windows XP ...
Tamara Wijsman,
2
@ChrisS Dziękujemy za link do listy dzielonych Keep! Ta witryna wydaje się teraz martwa. Według archiwum lista była: HTTPFilter, KDC, Netlogon, NTLMssp, PolicyAgent, ProtectedStorage, SamSs, Eventlog, PlugPlay(wszystkie powiązane z lsass.exe)
cxw
2
Chociaż nie wiem, jak łatwo to zrobić bezpośrednio, często możesz wywnioskować to na stronie właściwości Process Explorer dla procesu svchost. Karta Usługi we właściwościach procesu powie Ci, które usługi są hostowane w tym procesie. Karta Wątki pokaże działające wątki i stosy wątków, a także zużycie procesora. Często adres początkowy wątku podaje wskazanie biblioteki DLL punktu wejścia, a przez rozszerzenie usługi działającej w tym wątku. Innym razem możesz spojrzeć na stos wywołań wątku i zobaczysz nazwę modułu na stosie wywołań, który informuje, który fragment kodu jest uruchomiony.
Dmytro, gdzie mogę dowiedzieć się, jak korzystać z narzędzia do ujawniania usług? Pobrałem i uruchomiłem service_disclosure.exe na Windows 7. Krótko zobaczyłem, jak czarne okno poleceń otwiera się i zamyka, ale nic więcej się nie wydarzyło. To było niepokojące! Chciałbym wiedzieć, co zrobił z moim komputerem i jak prawidłowo korzystać z tego narzędzia.
Uwaga: przed zastosowaniem tej procedury należy wykonać niezbędne badania, przywrócić punkt i wykonać kopię zapasową, a także sprawdzić, czy wszystko nadal działa. Można to odzyskać dzięki środowisku odzyskiwania tylko w systemach innych niż RAID, a także w trybie awaryjnym zarówno w systemach RAID, jak i innych. Zostało to przetestowane na komputerze dewelopera, a nie na serwerach.
W Powershell możesz to zrobić dla wszystkich usług innych niż lsass, używając następujących poleceń:
Wykluczona tutaj lista musi być uruchomiona we współdzielonym pliku lsass.exe, z wyjątkiem policyagent , który jest wymagany, aby agent zasad grupy mógł poprawnie komunikować się podczas uruchamiania.
Niedawno odkryłem, że było to (Aktywacja procesu) i w3svc (IIS World Wide Web) muszą udostępniać swoje procesy, więc zostały one dodane do wykluczeń.
Ten został przetestowany na Windows 10 (1607, budować 14393,953), wyłączenia są różne w XP ... .
Nie wiem, czy nadal jest to pytanie, na które chcesz uzyskać odpowiedzi, ale podczas rozwiązywania problemu z błędem svchost klienta dowiedziałem się, że istnieje dokładnie wiersz poleceń: „tasklist / svc”. Zawiera pełną listę uruchomionych procesów, z identyfikatorem procesu i usługami uruchomionymi dla każdego procesu. Nie wymaga użycia procesora, ale możesz zamknąć je jeden proces naraz według identyfikatora procesu i dowiedzieć się przynajmniej, która grupa usług blokuje procesor.
W dzisiejszych czasach możesz użyć programu PowerShell, aby zmienić typy usług na „Proces własny” i zobaczyć pamięć dla każdego z nich osobno. Ta istota pokazuje pełny kod. Główną ideą jest próba zmiany rodzaju usługi z najmniej inwazyjnej na najbardziej inwazyjną:
$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"}
Umieszczając pliki Set-ServiceTypeToOwnProcess.ps1i Enable-Privilege.ps1w tym samym folderze, możesz wykonać skrypt w następujący sposób:
HTTPFilter, KDC, Netlogon, NTLMssp, PolicyAgent, ProtectedStorage, SamSs, Eventlog, PlugPlay
(wszystkie powiązane zlsass.exe
)Chociaż nie wiem, jak łatwo to zrobić bezpośrednio, często możesz wywnioskować to na stronie właściwości Process Explorer dla procesu svchost. Karta Usługi we właściwościach procesu powie Ci, które usługi są hostowane w tym procesie. Karta Wątki pokaże działające wątki i stosy wątków, a także zużycie procesora. Często adres początkowy wątku podaje wskazanie biblioteki DLL punktu wejścia, a przez rozszerzenie usługi działającej w tym wątku. Innym razem możesz spojrzeć na stos wywołań wątku i zobaczysz nazwę modułu na stosie wywołań, który informuje, który fragment kodu jest uruchomiony.
źródło
Wypróbuj narzędzie Service Disclosure . To:
Twoje komentarze i sugestie są mile widziane.
@Peter Mortensen: Dzięki za pomysł.
źródło
W Powershell możesz to zrobić dla wszystkich usług innych niż lsass, używając następujących poleceń:
Wykluczona tutaj lista musi być uruchomiona we współdzielonym pliku lsass.exe, z wyjątkiem policyagent , który jest wymagany, aby agent zasad grupy mógł poprawnie komunikować się podczas uruchamiania.
Niedawno odkryłem, że było to (Aktywacja procesu) i w3svc (IIS World Wide Web) muszą udostępniać swoje procesy, więc zostały one dodane do wykluczeń.
Ten został przetestowany na Windows 10 (1607, budować 14393,953), wyłączenia są różne w XP ... .
źródło
Nie wiem, czy nadal jest to pytanie, na które chcesz uzyskać odpowiedzi, ale podczas rozwiązywania problemu z błędem svchost klienta dowiedziałem się, że istnieje dokładnie wiersz poleceń: „tasklist / svc”. Zawiera pełną listę uruchomionych procesów, z identyfikatorem procesu i usługami uruchomionymi dla każdego procesu. Nie wymaga użycia procesora, ale możesz zamknąć je jeden proces naraz według identyfikatora procesu i dowiedzieć się przynajmniej, która grupa usług blokuje procesor.
źródło
W dzisiejszych czasach możesz użyć programu PowerShell, aby zmienić typy usług na „Proces własny” i zobaczyć pamięć dla każdego z nich osobno. Ta istota pokazuje pełny kod. Główną ideą jest próba zmiany rodzaju usługi z najmniej inwazyjnej na najbardziej inwazyjną:
Umieszczając pliki
Set-ServiceTypeToOwnProcess.ps1
iEnable-Privilege.ps1
w tym samym folderze, możesz wykonać skrypt w następujący sposób:źródło