Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: Internet Information Services
To narzędzie do rozwiązywania problemów pomoże zidentyfikować przyczynę trwałego wysokiego użycia procesora CPU w puli aplikacji usług Internet Information Services (IIS). Należy pamiętać, że użycie procesora CPU zwiększa się w miarę obsługi żądań przez aplikację internetową. Jednak jeśli stale widzisz, że procesor pozostaje na wysokim poziomie (w obszarze 80% lub większym) przez dłuższy czas, wydajność aplikacji będzie cierpieć. Z tego powodu ważne jest, aby zrozumieć przyczynę trwałego wysokiego użycia procesora CPU, aby można je było rozwiązać i poprawić, jeśli jest to możliwe.
Scenariusz
Pula aplikacji w usługach IIS ma dłuższy okres wysokiego użycia procesora CPU, który przekracza 90%. Po przetestowaniu aplikacji nie występują żadne problemy. Jednak gdy aplikacja doświadcza rzeczywistego obciążenia użytkownika, procesor CPU wzrasta do wysokiej wartości procentowej i pozostaje. Aby można było odzyskać, należy ponownie uruchomić pulę aplikacji, ale po wykonaniu tej czynności procesor CPU ponownie wspią się na wysoki poziom.
Narzędzia
- Diagnostyka debugowania (DebugDiag)
- monitor wydajności (Perfmon)
Zbieranie danych
Pierwszą rzeczą, jaką należy zrobić, gdy wystąpią problemy z wysokim użyciem procesora CPU, jest określenie procesu zużywania procesora CPU. Aby to zrobić, możesz użyć karty Procesy w Menedżerze zadań. Upewnij się, że zaznaczono pole wyboru Pokaż procesy ze wszystkich użytkowników . Na poniższej ilustracji przedstawiono to pole wyboru i pokazano w3wp.exe
proces (proces hostujący pulę aplikacji usług IIS) korzystający z wysokiego poziomu procesora CPU.
Możesz również użyć monitor wydajności, aby określić, jaki proces używa procesora CPU. Aby uzyskać więcej informacji na temat używania Monitora wydajności, zobacz Analizowanie danych wydajności.
Wskazówka
Jeśli musisz określić, która pula aplikacji jest skojarzona z określonym procesem w3wp.exe, otwórz wiersz polecenia administracyjnego, przejdź do %windir%\System32\inetsrv
folderu cd %windir%\System32\inetsrv
i uruchom polecenie appcmd list wp
. Spowoduje to wyświetlenie identyfikatora procesu (PID) procesu w3wp.exe w cudzysłowie. Możesz dopasować ten PID do PID znajdującego się w Menedżerze zadań.
Po potwierdzeniu, że proces w3wp.exe ma wysokie użycie procesora CPU, należy zebrać następujące informacje, aby ustalić, co powoduje problem:
- Zestaw zbierający dane programu Monitor wydajności.
- Zrzut pamięci trybu użytkownika procesu w3wp.exe.
Oba te elementy należy zebrać podczas wysokiego użycia procesora CPU.
Zbieranie zestawu modułów zbierających dane monitor wydajności
Dane z monitora wydajności często mają kluczowe znaczenie podczas określania przyczyny problemów z wysokim użyciem procesora. Może to być również bardzo przydatne w uzyskaniu ogólnego zarysu wydajności aplikacji.
Dane wydajności można wyświetlać w czasie rzeczywistym lub można je zbierać w zestawie modułów zbierających dane, które można przejrzeć później. Aby rozwiązać problem z wysokim użyciem procesora, musimy zebrać zestaw modułów zbierających dane. Aby utworzyć zestaw modułów zbierających dane do rozwiązywania problemów z wysokim użyciem procesora, wykonaj następujące kroki.
- Otwórz narzędzia administracyjne z Panel sterowania systemu Windows.
- Kliknij dwukrotnie na Monitor Wydajności.
- Rozwiń węzeł Zestawy Narzędzi Zbierania Danych.
- Kliknij prawym przyciskiem myszy pozycję Zdefiniowane przez użytkownika i wybierz pozycję Nowy zestaw modułów >zbierających dane.
- Wprowadź High CPU jako nazwę zestawu modułów zbierających dane.
- Wybierz pozycję Utwórz ręcznie (zaawansowane).
- Wybierz Dalej.
- Wybierz pozycję Utwórz dzienniki danych.
- Zaznacz pole wyboru Licznik wydajności.
- Wybierz Dalej.
- Wybierz Dodaj. Jeśli aplikacja nie jest aplikacją ASP.NET, przejdź do kroku 19.
- Przewiń w górę listy liczników i wybierz pozycję Pamięć środowiska CLR platformy .NET.
- Na liście wystąpień wybierz <wszystkie wystąpienia>.
- Wybierz pozycję Dodaj , aby dodać liczniki do listy dodanych liczników.
- Wybierz pozycję ASP.NET z listy liczników, a następnie wybierz pozycję Dodaj.
- Wybierz pozycję ASP.NET Aplikacje z listy liczników.
- Wybierz <wszystkie wystąpienia> z listy wystąpień.
- Wybierz Dodaj.
- Rozwiń Proces z listy liczników. (Pamiętaj, aby rozwinąć Proces, a nie procesor.)
- Wybierz % czasu procesora z obiektu Proces.
- Wybierz <wszystkie wystąpienia> z listy wystąpień.
- Wybierz Dodaj.
- Rozwiń węzeł Wątek z listy liczników.
- Wybierz % czasu procesora z obiektu Wątek.
- Wybierz <wszystkie wystąpienia> z listy wystąpień.
- Wybierz Dodaj.
- Wybierz ID wątku z listy wystąpień.
- Wybierz Dodaj.
Okno dialogowe powinno teraz wyglądać podobnie jak na poniższej ilustracji.
Wybierz przycisk OK -> Dalej. Zanotuj miejsce zapisywania zestawu modułów zbierających dane. (Możesz zmienić tę lokalizację, jeśli jest to konieczne). Następnie wybierz pozycję Zakończ.
Zestaw modułów zbierających dane nie jest jeszcze uruchomiony. Aby go uruchomić, kliknij prawym przyciskiem myszy na Wysoki CPU w węźle Definiowane przez użytkownika i wybierz opcję Start z menu.
Tworzenie reguły diagnostyki debugowania
Najprostszym sposobem zbierania zrzutów procesów trybu użytkownika, gdy występuje wysokie obciążenie procesora, jest użycie Debug Diagnostics.
Pobierz narzędzie DebugDiag, zainstaluj go na serwerze i uruchom go. (Znajdziesz go na Menu Start po instalacji). Po uruchomieniu DebugDiag zostanie wyświetlone okno dialogowe 'Wybierz typ reguły'. Wykonaj następujące kroki, aby utworzyć regułę awarii dla puli aplikacji:
- Wybierz pozycję Wydajność -> Dalej.
- Wybierz pozycję Liczniki wydajności -> Dalej.
- Wybierz Dodaj wyzwalacze wydajności.
- Rozwiń obiekt Procesor (a nie proces) i wybierz % czasu procesora. Należy pamiętać, że jeśli korzystasz z systemu Windows Server 2008 R2 i masz więcej niż 64 procesory, wybierz obiekt Informacje o procesorze zamiast obiektu Procesor .
- Na liście wystąpień wybierz pozycję _Total.
- Wybierz pozycję Dodaj ->OK.
- Wybierz nowo dodany wyzwalacz, a następnie wybierz pozycję Edytuj progi.
- Wybierz pozycję Powyższe na liście rozwijanej.
- Zmień próg na 80.
- Wprowadź wartość 20 dla liczby sekund. (W razie potrzeby można dostosować tę wartość, ale uważaj, aby nie określać niewielkiej liczby sekund, aby zapobiec fałszywym wyzwalaczom).
- Wybierz przycisk OK.
- Wybierz Dalej.
- Wybierz Dodaj cel zrzutu.
- Z listy rozwijanej wybierz pozycję Pula aplikacji internetowych.
- Wybierz pulę aplikacji z listy pul aplikacji.
- Wybierz przycisk OK.
- Wybierz Dalej.
- Ponownie wybierz przycisk Dalej .
- Wprowadź nazwę tej reguły, jeśli chcesz, i zanotuj lokalizację, w której zostaną zapisane zrzuty. W razie potrzeby możesz zmienić tę lokalizację.
- Wybierz Dalej.
- Wybierz pozycję Aktywuj regułę teraz, a następnie wybierz pozycję Zakończ.
Wskazówka
Można tworzyć zrzuty pamięci dla wielu pul aplikacji, dodając wiele celów zrzutu z wykorzystaniem tej samej techniki, co w krokach 13–15.
Ta reguła utworzy 11 plików zrzutu. Pierwsze 10 elementów to będą "mini-dumpy", które będą stosunkowo małe. Ostatnim zrzutem będzie zrzut z pełną pamięcią, a zrzuty będą znacznie większe.
Po wystąpieniu wysokiego problemu z procesorem CPU należy zatrzymać zestaw modułów zbierających dane narzędzia Perfmon od zbierania danych. Aby to zrobić, kliknij prawym przyciskiem myszy zestaw zbierający dane wysokie użycie CPU wymieniony w węźle Zdefiniowane przez użytkownika i wybierz polecenie Zatrzymaj.
Analiza danych
Po zdarzeniu wysokiego zużycia procesora będziesz mieć do przejrzenia dwa zestawy danych: kolekcję danych Perfmon i zrzuty pamięci. Zacznijmy od przejrzenia danych narzędzia Perfmon.
Analizowanie danych wydajności
Aby przejrzeć dane narzędzia Perfmon dotyczące problemu, kliknij prawym przyciskiem myszy zestaw modułów zbierających dane wysokiego użycia procesora CPU wymienionego w węźle Zdefiniowane przez użytkownika i wybierz pozycję Najnowszy raport. Zobaczysz raport podobny do poniższego zrzutu ekranu.
Pierwszą rzeczą jest usunięcie wszystkich bieżących liczników, aby można było dodać jawne liczniki, które chcesz przejrzeć. Wybierz pierwszy licznik na liście. Następnie przewiń do dołu listy i wybierz ostatni licznik przytrzymując SHIFT. Po wybraniu wszystkich liczników naciśnij Delete, aby je usunąć.
Teraz dodaj licznik / , wykonując następujące kroki:
- Kliknij prawym przyciskiem myszy w dowolnym miejscu w prawym okienku narzędzia Perfmon i wybierz pozycję Dodaj liczniki.
- Rozwiń obiekt Process.
- Z listy wybierz pozycję % czasu procesora.
- Wybierz <wszystkie wystąpienia> z listy wystąpień.
- Wybierz Dodaj.
- Wybierz przycisk OK.
Zostanie teraz wyświetlony wykres czasu procesora używany przez każdy proces na komputerze w czasie uruchomienia zestawu modułów zbierających dane. Najprostszym sposobem wyizolowania procesu, który był przy użyciu najwyższego poziomu procesora CPU, jest włączenie funkcji wyróżniania wydajności.
Aby to zrobić, wybierz pierwszy licznik na liście, a następnie naciśnij Ctrl + H. Po wykonaniu tej czynności wybrany proces będzie wyświetlany jako pogrubiona linia na grafie.
Użyj strzałki w dół na klawiaturze, aby przejść w dół przez listę procesów do momentu znalezienia procesu, który pokazuje największe użycie procesora CPU. Na poniższym zrzucie ekranu widać wyraźnie, że proces w3wp.exe używał dużej ilości procesora CPU na maszynie. Potwierdza to, że pula aplikacji usług IIS powoduje wysokie wykorzystanie procesora CPU na komputerze.
Wskazówka
Narzędzie Perfmon może być bardzo przydatne podczas określania problemów z wydajnością w aplikacji. Dane zebrane w dzienniku wydajności mogą pokazywać liczbę wykonywanych żądań (przy użyciu obiektów ASP.NET i ASP.NET Applications), a także wyświetlić inne ważne dane dotyczące wydajności aplikacji.
Aby dotrzeć do sedna przyczyn problemu z wysokim użyciem procesora, przejrzyjmy zrzuty utworzone za pomocą narzędzia DebugDiag.
Analiza zrzutu za pomocą narzędzia DebugDiag
DebugDiag umożliwia rozpoznawanie wielu problemów przez przeprowadzenie zautomatyzowanej analizy zrzutu. W przypadku tego konkretnego problemu, Analizatory wydajności DebugDiag są dobrze przystosowane do identyfikowania głównej przyczyny problemu z wysokim zużyciem CPU. Aby użyć analizatora, wykonaj następujące kroki
- Wybierz kartę Zaawansowana analiza w DebugDiag.
- Wybierz Analizator wydajności.
- Wybierz pozycję Dodaj pliki danych.
- Przejdź do lokalizacji, w której utworzono zrzuty. Domyślnie będzie to podfolder folderu C:\Program Files\DebugDiag\Logs .
- Wybierz jeden z zrzutów, a następnie naciśnij Ctrl + A, aby zaznaczyć wszystkie zrzuty w tym folderze.
- Wybierz Otwórz.
- Wybierz Rozpocznij analizę.
DebugDiag zajmuje kilka minut, aby przeanalizować zrzuty i przedstawić analizę. Po zakończeniu analizy zostanie wyświetlona strona podobna do przedstawionej na poniższej ilustracji.
Zwróć uwagę, że górna część raportu zaznacza, że wykryto wysokie użycie procesora. W prawej kolumnie zobaczysz zalecenia, które zawierają link do pierwszych 7 wątków według średniego czasu procesora CPU. Wybierz ten link, aby zobaczyć informacje o tym, co robiły procesy zużywające najwięcej zasobów CPU. Na przykład poniższy zrzut ekranu przedstawia działania tych wątków w mojej aplikacji.
W tym przykładzie jest uruchomiona strona default.aspx w aplikacji FastApp. Jeśli spojrzysz dalej w dół stosu wywołań (w dolnej części strony), zobaczysz, że ten wątek wykonuje łączenie ciągów. (Zwróć uwagę na wywołanie metody System.String.Concat
w stosie wywołań). Jeśli analizujesz inne główne wątki procesora CPU, zobaczysz ten sam wzorzec.
Następnym krokiem jest przejrzenie Page_Load
zdarzenia na stronie default.aspx aplikacji FastApp. Kiedy to zrobię, znajdę następujący kod.
htmlTable += "<table>";
for (int x = 0; x < 5000; x++)
{
htmlTable += "<tr>" + "<td>" + "Cell A" + x.ToString() + "</td>";
htmlTable += "<td>" + "Cell B" + x.ToString() + "</td>" + "</tr>";
}
htmlTable += "</table>";
Ten rodzaj kodu na pewno spowoduje wysokie użycie procesora CPU.
Podsumowanie
Korzystając z narzędzi Perfmon i DebugDiag, można łatwo zbierać dane, które mogą być przydatne podczas określania przyczyny wysokiego użycia procesora CPU w pulach aplikacji. Jeśli nie możesz znaleźć głównej przyczyny przy użyciu tych technik, możesz skontaktować się z pomocą techniczną firmy Microsoft, aby uzyskać dalszą pomoc. Inżynierowie pomocy technicznej firmy Microsoft mogą pomóc w ustaleniu przyczyny problemu. Dzięki gotowości danych Perfmon i zrzutów, gdy otworzysz sprawę, znacznie skrócisz czas potrzebny inżynierom na udzielenie pomocy.