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