Jak zidentyfikować przyczynę 100% użycia procesora w usłudze Azure App Service?

12

Mam pięć aplikacji w planie usługi Azure App Service, wszystkie różne kopie tej samej aplikacji dla różnych klientów. Jest to aplikacja ASP.NET MVC z bazą danych SQL.

Dziś rano obudziłem się w wolnych i niereagujących witrynach, co czasami powoduje błąd 503. Po sprawdzeniu parametrów procesora / pamięci dla planu usługi aplikacji odkryłem, że procesor jest ustawiony na 100%:

Procesor na 100%

Wykres czasu procesora poszczególnych stron pokazuje, że wszystkie zaczynają działać w tym samym czasie, choć niektóre gorsze niż inne:

Wykorzystanie procesora przez poszczególne witryny

Próbowałem rozwiązać problem poprzez ponowne uruchomienie aplikacji zaawansowanej, ale blok nie ładuje się - zakładam, ponieważ próbował uzyskać informacje z serwera, który nie mógł odpowiedzieć.

W końcu próbowałem zatrzymać każdą z witryn jeden po drugiej, co doprowadziło procesor do zera, a następnie uruchomiłem je ponownie, co wydawało się rozwiązać problem, ale teraz niektóre z nich zaczynają się wspinać.

Kilka tygodni temu doświadczyłem podobnego problemu i założyłem, że robię się zbyt duży, aby móc korzystać z mojego App Planu, więc zaktualizowałem wersję z S1 do S2 i do dzisiaj wszystko było w porządku.

Nie rozumiem, jak ustalić przyczynę tego głodnego zachowania procesora. Czy ktoś może wskazać mi właściwy kierunek, w jaki sposób mogę to zdiagnozować?

littlecharva
źródło
wydaje się, że tak się dzieje w przypadku planów usług aplikacji Azure, czy skontaktowałeś się z MS? - o ile nie wprowadzisz żadnych zmian, poinformuję ich, że istnieje problem z platformą.
Sum1sAdmin
Nie mam z nimi planu wsparcia, więc nie sądzę, że jest jakiś sposób, aby dać im znać. To trochę niepokojące, jeśli tylko przypadkowo napotkam 100% problemów z procesorem - być może będę musiał poszukać innego dostawcy. Czy myślisz, że posiadanie dwóch instancji pomogłoby?
littlecharva
Korzystałbym z otwartych forów, takich jak technet - jeśli jest to krytyczne, możesz to zwiększyć, ale nie zapłaciłbym więcej za coś, co trzeba naprawić, jeśli tak jest.
Sum1sAdmin

Odpowiedzi:

6

Ten problem występował już kilka razy i za każdym razem okazało się, że można go uciec GC (odśmiecanie). Trudno to udowodnić i zdiagnozować, ale to, co ostatecznie robię, to korzystanie z witryny kudo (scm), kliknięcie opcji tools => support (która prowadzi do strony wsparcia dla aplikacji).

Stamtąd wybierz swój katalog (w przypadku, gdy masz kilka) i witrynę, kliknij Analizuj => Metryki, a następnie przycisk Diagnozuj ( UWAGA, to już się zmieniło, aby te kroki mogły się zmienić w dowolnym momencie), a następnie z powrotem analizuj => Dianotics, możesz W końcu otrzymam raport Zrzut pamięci => „Stan analizy”. Powinien to być plik mht (który można otworzyć w nienawistnej przeglądarce IE lub Edge), a następnie wyszukać klucz „gc”.

znajdziesz kilka interesujących ramek stosów wywołań z odniesieniami do rzeczy takich jak „GCFrame” lub, co ciekawsze, wywołań do „System.Threading.WaitHandle.WaitMultiple”, jeśli otrzymasz ich zbyt wiele, możesz mieć problemy z odśmiecaniem pamięci .

Jak rozwiązać ten problem ... jest to temat omawiany w wielu innych wątkach, ponieważ przypomina to pytanie „jak żyć w świecie z wciąż używanym IE 6?” ...

cdmdotnet
źródło
1
To się zmieniło. Teraz znajduje się w usłudze App Service (nie na stronie SCM, zwykłej stronie Azure) w „Diagnozuj i rozwiązuj problemy-> Narzędzia diagnostyczne-> Zbieraj zrzut pamięci”
Josh Noe,
3

Najlepszym rozwiązaniem byłoby zainstalowanie New Relic lub Application Insights dla tej konkretnej aplikacji. Można go łatwo zainstalować za pomocą usługi aplikacji -> Narzędzia -> Monitorowanie wydajności. To daje szczegółowy widok tego, co dzieje się zarówno po stronie serwera, jak i klienta.

Monitorowanie aplikacji

Artykuł: Monitoruj wydajność aplikacji sieci Web platformy Azure

Bruno Faria
źródło