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%:
Wykres czasu procesora poszczególnych stron pokazuje, że wszystkie zaczynają działać w tym samym czasie, choć niektóre gorsze niż inne:
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ć?
źródło
Odpowiedzi:
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?” ...
źródło
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.
Artykuł: Monitoruj wydajność aplikacji sieci Web platformy Azure
źródło