Rozwiązywanie problemów z niską wydajnością aplikacji w Azure App Service

Ten artykuł ułatwia rozwiązywanie problemów z niską wydajnością aplikacji w Azure App Service.

Jeśli potrzebujesz więcej pomocy w dowolnym momencie tego artykułu, możesz skontaktować się z ekspertami platformy Azure na forach MSDN Azure i Stack Overflow. Alternatywnie można również zgłosić zdarzenie pomoc techniczna platformy Azure. Przejdź do witryny pomocy technicznej platformy Azure i kliknij pozycję Uzyskaj pomoc techniczną.

Objaw

Podczas przeglądania aplikacji strony ładują się powoli, a czasami przekroczenie limitu czasu.

Przyczyna

Ten problem jest często spowodowany problemami na poziomie aplikacji, takimi jak:

  • długi czas żądań sieciowych
  • nieefektywne wykonywanie zapytań dotyczących kodu aplikacji lub bazy danych
  • aplikacja korzystająca z pamięci/procesora CPU
  • awaria aplikacji z powodu wyjątku

Kroki rozwiązywania problemów

Rozwiązywanie problemów można podzielić na trzy odrębne zadania w kolejności sekwencyjnej:

  1. Obserwowanie i monitorowanie zachowania aplikacji
  2. Zbieranie danych
  3. Eliminowanie problemu

App Service oferuje różne opcje w każdym kroku.

1. Obserwowanie i monitorowanie zachowania aplikacji

Śledzenie Kondycja usługi

Platforma Microsoft Azure jest nagłośniana za każdym razem, gdy występuje przerwa w działaniu usługi lub obniżenie wydajności. Kondycję usługi można śledzić na Azure Portal. Aby uzyskać więcej informacji, zobacz Śledzenie kondycji usługi.

Monitorowanie aplikacji

Ta opcja umożliwia sprawdzanie, czy aplikacja ma jakiekolwiek problemy. W bloku aplikacji kliknij kafelek Żądania i błędy . Blok Metryka zawiera wszystkie metryki, które można dodać.

Niektóre metryki, które mogą być monitorowane dla aplikacji, to

  • Średni zestaw roboczy pamięci
  • Czas odpowiedzi
  • Czas procesora CPU
  • Zestaw roboczy pamięci
  • Żądania

monitorowanie wydajności aplikacji

Aby uzyskać więcej informacji, zobacz:

Monitorowanie stanu internetowego punktu końcowego

Jeśli używasz aplikacji w warstwie cenowej Standardowa, App Service umożliwia monitorowanie dwóch punktów końcowych z trzech lokalizacji geograficznych.

Monitorowanie punktu końcowego konfiguruje testy internetowe z lokalizacji rozproszonych geograficznie, które testują czas odpowiedzi i czas działania adresów URL sieci Web. Test wykonuje operację HTTP GET w internetowym adresie URL, aby określić czas odpowiedzi i czas pracy z każdej lokalizacji. Każda skonfigurowana lokalizacja uruchamia test co pięć minut.

Czas pracy jest monitorowany przy użyciu kodów odpowiedzi HTTP, a czas odpowiedzi jest mierzony w milisekundach. Test monitorowania kończy się niepowodzeniem, jeśli kod odpowiedzi HTTP jest większy lub równy 400 lub jeśli odpowiedź trwa dłużej niż 30 sekund. Punkt końcowy jest uznawany za dostępny, jeśli testy monitorowania kończą się powodzeniem ze wszystkich określonych lokalizacji.

Aby ją skonfigurować, zobacz Monitorowanie aplikacji w Azure App Service.

Zobacz też Artykuł Keeping Azure Web Sites up plus Endpoint Monitoring (Utrzymywanie witryn internetowych platformy Azure i monitorowanie punktów końcowych) — w temacie Stefan Schackow for a video on endpoint monitoring (Monitorowanie punktów końcowych za pomocą programu Stefan Schackow).

Monitorowanie wydajności aplikacji przy użyciu rozszerzeń

Wydajność aplikacji można również monitorować przy użyciu rozszerzenia witryny.

Każda aplikacja App Service udostępnia rozszerzalny punkt końcowy zarządzania, który umożliwia korzystanie z zaawansowanego zestawu narzędzi wdrożonych jako rozszerzenia witryny. Rozszerzenia obejmują:

  • Edytory kodu źródłowego, takie jak Azure DevOps.
  • Narzędzia do zarządzania dla połączonych zasobów, takich jak baza danych MySQL połączona z aplikacją.

aplikacja systemu Azure Insights to rozszerzenie lokacji monitorowania wydajności, które jest również dostępne. Aby użyć usługi Application Insights, należy ponownie skompilować kod za pomocą zestawu SDK. Można również zainstalować rozszerzenie, które zapewnia dostęp do dodatkowych danych. Zestaw SDK umożliwia pisanie kodu w celu bardziej szczegółowego monitorowania użycia i wydajności aplikacji. Aby uzyskać więcej informacji, zobacz Monitorowanie wydajności w aplikacjach internetowych.

2. Zbieranie danych

App Service zapewnia funkcje diagnostyczne służące do rejestrowania informacji zarówno z serwera internetowego, jak i aplikacji internetowej. Informacje są oddzielone diagnostyką serwera internetowego i diagnostyką aplikacji.

Włączanie diagnostyki serwera internetowego

Możesz włączyć lub wyłączyć następujące rodzaje dzienników:

  • Szczegółowe rejestrowanie błędów — szczegółowe informacje o błędach kodów stanu HTTP, które wskazują błąd (kod stanu 400 lub nowszy). Może to zawierać informacje, które mogą pomóc określić, dlaczego serwer zwrócił kod błędu.
  • Śledzenie żądań niepomyślnych — szczegółowe informacje o żądaniach, które zakończyły się niepowodzeniem, w tym ślad składników usług IIS używanych do przetwarzania żądania i czasu potrzebnego w każdym składniku. Może to być przydatne, jeśli próbujesz poprawić wydajność aplikacji lub wyizolować przyczynę określonego błędu HTTP.
  • Rejestrowanie serwera sieci Web — informacje o transakcjach HTTP przy użyciu rozszerzonego formatu pliku dziennika W3C. Jest to przydatne podczas określania ogólnych metryk aplikacji, takich jak liczba obsługiwanych żądań lub liczba żądań z określonego adresu IP.

Włączanie diagnostyki aplikacji

Istnieje kilka opcji zbierania danych wydajności aplikacji z App Service, profilowania aplikacji na żywo z programu Visual Studio lub modyfikowania kodu aplikacji w celu rejestrowania dodatkowych informacji i śladów. Możesz wybrać opcje na podstawie ilości dostępu do aplikacji i obserwowanych z poziomu narzędzi do monitorowania.

Korzystanie z profilera usługi Application Insights

Możesz włączyć profiler usługi Application Insights, aby rozpocząć przechwytywanie szczegółowych śladów wydajności. Możesz uzyskać dostęp do śladów przechwyconych do pięciu dni temu, gdy trzeba zbadać problemy, które wystąpiły w przeszłości. Możesz wybrać tę opcję, o ile masz dostęp do zasobu usługi Application Insights aplikacji w Azure Portal.

Usługa Application Insights Profiler udostępnia statystyki dotyczące czasu odpowiedzi dla każdego wywołania internetowego i śladów wskazujących, który wiersz kodu spowodował powolne odpowiedzi. Czasami aplikacja App Service działa wolno, ponieważ określony kod nie jest zapisywany w wydajny sposób. Przykłady obejmują sekwencyjny kod, który można uruchomić równolegle i niepożądane rywalizacje o blokady bazy danych. Usunięcie tych wąskich gardeł w kodzie zwiększa wydajność aplikacji, ale trudno je wykryć bez konfigurowania skomplikowanych śladów i dzienników. Ślady zebrane przez profilera usługi Application Insights pomagają zidentyfikować wiersze kodu, które spowalniają aplikację i pozwalają przezwyciężyć to wyzwanie dla App Service aplikacji.

Aby uzyskać więcej informacji, zobacz Profilowanie aplikacji na żywo w Azure App Service za pomocą usługi Application Insights.

Korzystanie z profilowania zdalnego

W Azure App Service aplikacje internetowe, aplikacje interfejsu API, zaplecza mobilne i zadania WebJob mogą być profilowane zdalnie. Wybierz tę opcję, jeśli masz dostęp do zasobu aplikacji i wiesz, jak odtworzyć problem, lub jeśli znasz dokładny interwał czasu, w którym występuje problem z wydajnością.

Profilowanie zdalne jest przydatne, jeśli użycie procesora CPU procesu jest wysokie, a proces działa wolniej niż oczekiwano, lub opóźnienie żądań HTTP jest wyższe niż zwykle, można zdalnie profilować proces i pobrać stosy wywołań próbkowania procesora CPU w celu przeanalizowania działania procesu i ścieżek gorących kodu.

Aby uzyskać więcej informacji, zobacz Obsługa profilowania zdalnego w Azure App Service.

Ręczne konfigurowanie śladów diagnostycznych

Jeśli masz dostęp do kodu źródłowego aplikacji internetowej, diagnostyka aplikacji umożliwia przechwytywanie informacji generowanych przez aplikację internetową. ASP.NET aplikacje mogą używać System.Diagnostics.Trace klasy do rejestrowania informacji w dzienniku diagnostycznym aplikacji. Należy jednak zmienić kod i ponownie wdrożyć aplikację. Ta metoda jest zalecana, jeśli aplikacja jest uruchomiona w środowisku testowym.

Aby uzyskać szczegółowe instrukcje dotyczące konfigurowania aplikacji do rejestrowania, zobacz Włączanie rejestrowania diagnostycznego dla aplikacji w Azure App Service.

Korzystanie z narzędzia diagnostycznego

App Service zapewnia inteligentne i interaktywne środowisko ułatwiające rozwiązywanie problemów z aplikacją bez konieczności konfigurowania. Gdy wystąpią problemy z aplikacją, narzędzie diagnostyczne wskaże, co jest nie tak, aby ułatwić i szybko rozwiązać ten problem.

Aby uzyskać dostęp do diagnostyki App Service, przejdź do aplikacji App Service lub App Service Environment w Azure Portal. W obszarze nawigacji po lewej stronie kliknij pozycję Diagnozowanie i rozwiązywanie problemów.

Korzystanie z konsoli debugowania Kudu

App Service zawiera konsolę debugowania, której można używać do debugowania, eksplorowania, przekazywania plików oraz punktów końcowych JSON w celu uzyskania informacji o środowisku. Ta konsola jest nazywana konsolą Kudu lub pulpitem nawigacyjnym SCM dla aplikacji.

Dostęp do tego pulpitu nawigacyjnego można uzyskać, przechodząc do linku https://< Nazwa aplikacji.scm.azurewebsites.net/>.

Oto niektóre z rzeczy, które zapewnia Kudu:

  • ustawienia środowiska aplikacji
  • strumień dziennika
  • zrzut diagnostyczny
  • konsola debugowania, w której można uruchamiać polecenia cmdlet programu PowerShell i podstawowe polecenia systemu DOS.

Inną przydatną funkcją kudu jest to, że w przypadku, gdy aplikacja zgłasza wyjątki z pierwszej szansy, można użyć kudu i narzędzia SysInternals Procdump w celu utworzenia zrzutów pamięci. Te zrzuty pamięci to migawki procesu i często ułatwiają rozwiązywanie bardziej skomplikowanych problemów z aplikacją.

Aby uzyskać więcej informacji na temat funkcji dostępnych w usłudze Kudu, zobacz Narzędzia usługi Azure DevOps, o których należy wiedzieć.

3. Eliminowanie problemu

Skalowanie aplikacji

W Azure App Service w celu zwiększenia wydajności i przepływności można dostosować skalę, w której działa aplikacja. Skalowanie w górę aplikacji obejmuje dwie powiązane akcje: zmianę App Service planu na wyższą warstwę cenową i skonfigurowanie niektórych ustawień po przełączeniu do wyższej warstwy cenowej.

Aby uzyskać więcej informacji na temat skalowania, zobacz Skalowanie aplikacji w Azure App Service.

Ponadto możesz uruchomić aplikację w więcej niż jednym wystąpieniu. Skalowanie w górę nie tylko zapewnia większą możliwości przetwarzania, ale także zapewnia pewną odporność na uszkodzenia. Jeśli proces ulegnie awarii w jednym wystąpieniu, inne wystąpienia będą nadal obsługiwać żądania.

Skalowanie można ustawić na Wartość Ręczna lub Automatyczna.

Korzystanie z autohealu

Automatyczne odtwarzanie procesu roboczego aplikacji na podstawie wybranych ustawień (takich jak zmiany konfiguracji, żądania, limity oparte na pamięci lub czas potrzebny do wykonania żądania). W większości przypadków odtwarzanie procesu jest najszybszym sposobem odzyskiwania po problemie. Chociaż zawsze możesz ponownie uruchomić aplikację bezpośrednio w Azure Portal, funkcja AutoHeal automatycznie wykonuje ją automatycznie. Wystarczy dodać niektóre wyzwalacze w katalogu głównym web.config dla aplikacji. Te ustawienia będą działać w taki sam sposób, nawet jeśli aplikacja nie jest aplikacją platformy .NET.

Aby uzyskać więcej informacji, zobacz Autonaprawiania witryn internetowych platformy Azure.

Uruchom ponownie aplikację

Ponowne uruchamianie jest często najprostszym sposobem odzyskiwania po jednorazowych problemach. W Azure Portal w bloku aplikacji dostępne są opcje zatrzymania lub ponownego uruchomienia aplikacji.

ponowne uruchamianie aplikacji w celu rozwiązania problemów z wydajnością

Możesz również zarządzać aplikacją przy użyciu Azure PowerShell. Aby uzyskać więcej informacji, zobacz temat Using Azure PowerShell with Azure Resource Manager (Używanie programu Azure PowerShell z usługą Azure Resource Manager).

Więcej zasobów

Samouczek: uruchamianie testu obciążeniowego w celu zidentyfikowania wąskich gardeł wydajności w aplikacji internetowej