Мониторинг и анализ поведения среды выполнения с помощью оптимизации кода

Диагностика проблем с производительностью приложения может быть сложной задачей, особенно если приложение работает в рабочей среде в динамическом облаке. Инфраструктура, платформа или код приложения, обрабатывающий запрос в конвейере, может вызвать медленные ответы в приложении.

Оптимизация кода, служба на основе ИИ в Azure Application Insights, работает в тандеме с Application Insights Profiler для .NET. Вместе они обнаруживают проблемы с производительностью использования ЦП и памяти на уровне кода. Они предоставляют рекомендации по устранению этих проблем.

Принятие обоснованных решений и оптимизация кода с помощью данных производительности в режиме реального времени и аналитических сведений, собранных из рабочей среды.

Оптимизация кода и Профилировщик Application Insights для .NET

Профилировщик .NET и оптимизации кода работают вместе, чтобы обеспечивать комплексный подход к обнаружению проблем производительности.

Оптимизация кода

Code Optimizations определяет, анализирует и устраняет данные профилирования, собранные Профилировщиком Application Insights для .NET. По мере того как .NET Профилировщик отправляет данные в Application Insights, наша модель machine learning анализирует некоторые данные, чтобы найти, где можно оптимизировать код приложения. Оптимизация кода:

  • Отображает агрегированные данные, собранные с течением времени.
  • Подключает данные с методами и функциями в коде приложения.
  • Сужает круг поиска виновника, выявляя узкие места в коде.
  • Предоставляет исправления производительности на уровне кода на основе аналитических сведений.

Определить

С помощью страницы Обобщённый обзор оптимизаций кода вы можете просмотреть все оптимизации кода в подписках Azure и ресурсах Application Insights на портале Azure.

Оптимизация кода собирает информацию из данных, собранных профилировщиком .NET и снимков, сделанных отладчиком моментальных снимков, если включены. Вы можете определить узкие места в коде и просмотреть рекомендации на уровне кода для разработки, тестирования, предварительной подготовки и рабочей среды.

Анализировать

После сбора данных среды из трассировок .NET Profiler и снимков отладчика Snapshot Debugger, если они включены, оптимизация кода предоставляет рекомендации на уровне кода каждый час. По умолчанию в агрегированном представлении данных отображается 24-часовое окно недавно выявленных проблем с 30-дневным журналом для просмотра и анализа прошлых событий.

Решить

После определения и анализа оптимизации кода можно использовать кнопку "Копировать сведения " на портале Azure, чтобы вручную перенести контекст аналитики в избранное средство, например GitHub Copilot.

Вы также можете создать проблему GitHub на странице оптимизации кода в Azure portal и назначить его агенту кода GitHub Copilot. Оттуда GitHub Copilot открывает pull request и отправляет коммиты изменений кода на основе оптимизации кода.

Демонстрационное видео

Профилировщик Application Insights для .NET

.NET Profiler фокусируется на трассировке конкретных запросов вплоть до миллисекунда. Он предоставляет отличное представление о проблемах в приложении и общих рекомендациях по их устранению.

С помощью Application Insights Profiler для .NET можно записывать, определять и просматривать трассировки производительности для приложения, работающего в Azure, независимо от сценария. Процесс трассировки .NET Profiler происходит автоматически, масштабируемо и не оказывает негативного воздействия на пользователей. Профилировщик .NET идентифицирует:

  • Срединное, минимальное и максимальное время отклика для каждого веб-запроса, поступившего от пользователей.
  • Горячий участок кода, на котором тратится больше всего времени на обработку определенного веб-запроса.

Включите профилировщик для .NET всех приложений Azure для сбора данных со следующими триггерами:

  • Триггер выборки: запускает профилировщик случайным образом примерно один раз в час в течение двух минут.
  • Триггер ЦП: запускает профилировщик, если процент использования ЦП превышает 80 процентов.
  • Триггер памяти: запускает профилировщик, если использование памяти превышает 80 процентов.

Каждый из этих триггеров можно настроить, включить или отключить.

Затраты и накладные расходы

Оптимизации кода создаются автоматически после включения профилировщика Application Insights для .NET. По умолчанию Profiler активно собирает трассировки каждый час по 30 секунд или в периоды высокой загрузки ЦП или памяти в течение 30 секунд. Почасовые трассировки (называемые выборкой) идеально подходят для упреждающей настройки. Трассировки высокой загрузки ЦП и памяти (называемые триггерами) полезны для реактивного устранения неисправностей.

Замечание

Когда Application Insights Profiler для .NET активно работает и собирает трассировки, это обычно добавляет от 5% до 15% нагрузки на ЦП и память вашего сервера.

Нет дополнительной стоимости за хранение данных, захваченных .NET Profiler. Данные автоматически удаляются через 15 дней.

Для некоторых функций оптимизации кода, таких как предложения по исправлению на уровне кода, требуется Copilot для GitHub или Copilot для Azure.

Включение профилировщика .NET

По мере развития платформ и служб Azure вы можете включить .NET Profiler для приложений .NET, работающих в Azure, с помощью различных вариантов.

служба Azure Как включить Сведения
Большинство служб Azure Изменение кода в приложении
(наиболее универсальный)
Если приложение .NET работает в вариантах служб PaaS или контейнеров Azure, можно выбрать один из двух вариантов включения .NET Profiler:
- Application Insights Profiler for ASP.NET Core, использующий пакет SDK Application Insights или
- НовыйAzure Monitor OpenTelemetry Profiler для .NET (предварительная версия), использующий Azure Monitor OpenTelemetry Distro
Azure App Service Нет изменений кода для приложения Так как профилировщик предварительно установлен, вы можете включить Profiler для .NET на портале Azure для:
- Azure App Service — приложение .NET в Windows
- Azure Functions — тарифный план App Service
Virtual Machines Нет изменений кода для приложения После включения пакета SDK Application Insights в коде приложения можно включить Профилировщик для .NET в шаблоне ARM.
- виртуальные машины Azure и масштабируемые наборы виртуальных машин Azure для Windows
- Azure Service Fabric

Подробные сведения и примеры включения Profiler для .NET

Замечание

В настоящее время вы также можете использовать Java Profiler для Azure Monitor Application Insights, который находится в предварительной версии.

Поддерживаемые регионы

Оптимизация кода доступна в том же регионе, что и Application Insights. Вы можете проверить доступные регионы с помощью следующей команды:

az account list-locations -o table

Можно задать конкретный регион с помощью строк подключения. Дополнительные сведения см. в примерах строки подключения.

Ограничения

Profiler

  • Профилирование веб-приложений:
    • Вы можете использовать профилировщик .NET без дополнительных затрат, хотя веб-приложение должно размещаться как минимум на базовом уровне функции веб-приложений.
    • Вы можете присоединить только один профилировщик к каждому веб-приложению.

Оптимизация кода

  • Требования к хранению:
    • В настоящее время оптимизация кода работает только с хранилищем Profiler или Application Insights по умолчанию. Она несовместима с Bring-Your-Own-Storage (BYOS).

Устранение неполадок

Узнайте, как включить профилировщик .NET с оптимизацией кода в службе Azure: