Mam system HP ProLiant DL380 G7 wykorzystujący 2 6-rdzeniowe procesory, z włączoną funkcją Hyper-Threading, w sumie 24 logiczne procesory (jak widać w systemie Windows).
Podczas uruchamiania naszej aplikacji całkowite wykorzystanie procesora przez system jest dobre, ale jeden z 24 CUP jest ustawiony na 100%:
Edycja: To są dane PerfMon dla procesu systemowego w tym czasie i dla procesora o wysokim wykorzystaniu:
Czy to normalne? Jeśli nie, to czy istnieje sposób na określenie, które procesy wykorzystują ten logiczny procesor? Windows PerfMon, ResMon, Menedżer zadań i Process Explorer nie pomogły poza ustaleniem, że procesor ma 100% mocy.
windows-server-2008-r2
performance
cpu-usage
Patrick Mankiet
źródło
źródło
Odpowiedzi:
Jak już zauważyli inni, z tego zrzutu ekranu widać, że tak ciężko pracujący procesor spędza cały czas w trybie jądra. (Kolor czerwony.)
Uruchamiając PowerShell jako administrator, wpisz:
Proces znajdujący się na górze listy jest obecnie procesem wykorzystującym obecnie najwięcej czasu procesora w trybie jądra. Jeśli ten proces nie jest „Systemowy”, właśnie zorientowałeś się, jaki proces trybu użytkownika powoduje użycie tego procesora. Jeśli proces z najwyższym uprzywilejowanym czasem procesora to System, co podejrzewam, że jest, to jest to trochę bardziej skomplikowane.
Otwórz Process Explorer. Opcjonalnie skonfiguruj serwer symboli. Upewnij się, że korzystasz z pełnej wysokości UAC. Kliknij prawym przyciskiem myszy „proces” systemu i przejdź do Właściwości. Następnie przejdź do zakładki Wątki. Sortuj wątki według zużycia procesora. Wątek, który powoduje cały ten tryb jądra powinien być tutaj. Jeśli spojrzysz na moduł wymieniony w polu Adres początkowy, powinien on dać ci wskazówkę, z czym praca jest związana. Jeśli na przykład jest to NDIS.sys, jest to sterownik interfejsu sieciowego. Jeśli skonfigurujesz serwer symboli, powinieneś zobaczyć nazwę funkcji w module (chyba że moduł jest inny niż Microsoft), w przeciwnym razie zobaczysz tylko numeryczne przesunięcie od adresu początkowego modułu.
Alternatywnie, użyj Xperf z Windows Performance Toolkit do profilowania przerwań, DPC itp.
i zatrzymaj nagrywanie za pomocą
xperf -d logfile.etl
Xperf zastępuje stare narzędzie Kernrate i może dostarczyć ci bardzo szczegółowe dane.
Gdy procesor pracuje w trybie jądra, przeważnie wykonuje procedury obsługi przerwań. (ISR) Gdy wystąpi przerwanie, praca w trybie użytkownika jest zawieszona na tym procesorze, a CPU uruchamia ISR zarejestrowany na tym przerwaniu. Jeśli zauważysz, że Twój procesor spędza nadmiernie dużo czasu na tych przerwaniach, zwykle oznacza to, że wadliwy sterownik urządzenia wymaga aktualizacji.
Co mnie jednak w tym scenariuszu wkurza (bez zamierzonej gry słów) to to, że wydaje się, że cokolwiek wątek jądra, który to robi, wydaje się być afinitowany do tego jednego rdzenia. Zastanawiam się, dlaczego dyspozytor wydaje się jedynie planować uruchamianie wątku na tym z pozoru arbitralnym rdzeniu. Mam więc wrażenie, że musimy znaleźć tego, kto napisał ten sterownik urządzenia i pokazać im, jak robić wątkowe DPC, a nie wyraźnie określać powinowactwo do wątków jądra itp.
źródło
Pokaż kolumnę „Czas procesora” na karcie „Szczegóły” w „Menedżerze zadań” i poszukaj procesu, w którym liczba procesorów stale rośnie. To twój kliniczny proces. Powinien stale używać około 4,17% procesora.
źródło
Wydaje się, że to cały czas jądra, mogą to być Przerwania, mogą być obsługiwane tylko przez jeden procesor.
źródło
Poszukaj procesu ze stałym wykorzystaniem procesora ~ 4% (= 1/24 całkowitego dostępnego procesora). To powinien być ten, który stale zajmuje jeden procesor.
źródło