Служба приложений Azure. Как определить, какой процесс потребляет высокую загрузку ЦП?
ОБНОВЛЕНИЕ: я понял это. Смотрите конец этого вопроса.
У меня есть служба приложений Azure, на которой работают четыре сайта. Один из сайтов имеет два слота для развертывания в дополнение к основному. В последнее время я наблюдаю очень высокую загрузку ЦП для плана службы приложений в целом.
Темно-оранжевая линия показывает процент загрузки процессора. Это только после перезапуска всех моих сайтов, что привело его к этому уровню.
Тем не менее, когда я смотрю на использование процессора, сообщаемое каждым сайтом, оно действительно низкое.
Темная синяя линия показывает процессорное время, которое в принципе ничто. Я сделал это для всех своих сайтов, и все графики выглядят одинаково. По сути, кажется, что ни один из моих сайтов не вызывает проблему.
На нескольких сайтах есть веб-задания, поэтому я посмотрел журналы, но там все работает нормально. Задания выполняются на несколько секунд каждые несколько часов.
Итак, мой вопрос: как я могу определить источник этой загрузки ЦП? Любые указатели будут с благодарностью.
ОБНОВЛЕНИЕ: Благодаря ответам ниже, я смог получить более подробную информацию о том, что происходит. В итоге я получил то, что мне нужно, от инструментов SCM / Kudu. Вы можете попасть сюда, перейдя в свое веб-приложение в Azure и выбрав Дополнительные инструменты на боковой панели навигации. На панели инструментов Kudu выберите Process Explorer. Значение в столбце "Общее время ЦП" напрямую не используется, поскольку это время в секундах, в течение которого процесс запускался с момента его запуска, что могло быть несколько минут или дней назад.
Однако, если вы делаете запись значения через определенные промежутки времени, вы можете посмотреть на изменение с течением времени, и один процесс может выскочить на вас. В моем случае это был мой процесс WebJobs. Каждые 60 секунд этот процесс занимал около 10 секунд процессорного времени, только в одной среде.
Отличительной особенностью этой панели инструментов Kudu является то, что если вы можете обнаружить проблему, когда она действительно возникает, вы можете нажать кнопку "Начать профилирование" и записать сеанс диагностики. Затем вы можете открыть это в Visual Studio и получить некоторые подробные сведения о том, на что тратится время процессора.
На случай, если кто-то еще столкнется с подобными проблемами, я предоставлю более подробную информацию о моем конкретном случае. Как я уже упоминал, мой исполняемый файл WebJobs был виновником, и я обнаружил, что все процессорное время тратится в StackExchange.Redis.SocketManager, который управляет подключениями к Azure Redis Cache. В моем основном веб-приложении я создаю только одно соединение, как рекомендуется. Но поскольку мои веб-задания выполняются только время от времени, я каждый раз создавал новое соединение с Redis Cache Azure, что, очевидно, может привести к проблемам. Я изменил свой код, чтобы создать соединение Redis Cache один раз при запуске процесса WebJob и использовать существующее соединение при запуске любого отдельного WebJob.
Время покажет, действительно ли это решит проблему, но я думаю, что так и будет. Когда возникала проблема, она всегда соответствовала одной и той же схеме: после нескольких дней нормальной работы мой процессор медленно увеличивался в течение примерно 12 часов. Я думаю, что каждый раз, когда запускается WebJob, он создает объект подключения, который сначала не создавал проблем, но постепенно, поскольку WebJobs запускался каждый час или два, накапливался беспорядок, пока, наконец, не был достигнут некоторый критический порог и загрузка ЦП. взлетит.
Надеюсь, это поможет кому-то там. С наилучшими пожеланиями!
2 ответа
Может быть, вам стоит зайти в webApp scm?
% yourAppName%.scm.azurewebsites.com;
Есть страница, которая может показать вам весь процесс, запущенный сейчас в вашем веб-приложении. (что-то вроде Console > Process).
Также вы можете перейти на страницу поддержки (из правого угла scm). Вы можете найти больше информации о вашей производительности и сделать дамп памяти (не для этой проблемы, но это полезно для проблем с производительностью).
Согласно вашему описанию, я предполагал, что вы можете использовать расширение Crash Diagnoser для захвата файлов дампа из ваших веб-приложений и веб-заданий, когда процент использования процессоров выше определенного порога, чтобы изолировать эту проблему. Для более подробной информации, вы можете обратиться к этому официальному блогу.