У меня есть пять приложений в плане обслуживания приложений Azure, все разные копии одного и того же приложения для разных клиентов. Это приложение ASP.NET MVC с базой данных SQL.
Этим утром я проснулся на медленных и не отвечающих сайтах, что иногда приводило к ошибке 503. После проверки метрик ЦП / памяти для Плана обслуживания приложений я обнаружил, что ЦП привязан на 100%:
А график загрузки процессора отдельными сайтами показывает, что все они работают одновременно, хотя некоторые из них хуже, чем другие:
Я попытался решить проблему, выполнив расширенный перезапуск приложения, но блейд не загрузился - я полагаю, потому что он пытался получить информацию с сервера, который не смог ответить.
В конце я попытался остановить каждый из сайтов по одному, что вернуло ЦПУ к нулю, затем снова включил их, что, казалось, решило проблему, но теперь некоторые из них начинают подниматься обратно.
Я столкнулся с подобной проблемой пару недель назад и предположил, что стал слишком большим для своего Плана приложений, поэтому перешел с S1 на S2, и до сегодняшнего дня все было хорошо.
Я в полной растерянности относительно того, как выяснить, в чем причина этого голодного процессора. Кто-нибудь может указать мне правильное направление, как я могу начать диагностировать это?
источник
Ответы:
У нас была эта проблема несколько раз, и каждый раз, когда это оказывалось, убегал GC (сборка мусора). Это сложно доказать и диагностировать, но в итоге я использую сайт kudo (scm), нажимая tools => support (и вы переходите на сайт поддержки приложений).
Отсюда вы выбираете свой каталог (если у вас их несколько) и сайт, нажимаете Analyze => Metrics, затем кнопку Diagnose ( ПРИМЕЧАНИЕ, это уже изменилось, поэтому эти шаги могут измениться в любое время), а затем возвращаетесь к Analyze => Dianotics, вы в конечном итоге вы получите отчет Dump => «Состояние анализа». Это должен быть файл MHT (который вы можете открыть в ненавистном браузере IE или Edge), затем найдите ключ «gc».
вы найдете несколько интересных фреймов стека вызовов со ссылками на такие вещи, как «GCFrame» или, что более интересно, вызовами «System.Threading.WaitHandle.WaitMultiple», если вы получите слишком много из них, ваша система может иметь проблемы со сборкой мусора ,
Как решить эту проблему ... это тема, затронутая во многих других темах, потому что это все равно, что спросить: «Как мне жить в мире, где IE 6 все еще используется?» ...
источник
Лучше всего было бы установить New Relic или Application Insights для этого конкретного приложения. Его легко установить через Сервис приложений -> Инструменты -> Мониторинг производительности. Это даст вам подробное представление о том, что происходит на стороне сервера и клиента.
Статья. Отслеживание производительности веб-приложения Azure
источник