Поделиться через


Профилировщик Java Profiler для Application Insights Azure Monitor

Примечание.

Функция Профилировщика Java доступна в предварительной версии начиная с версии 3.4.0.

Профилировщик Java Application Insights предоставляет систему для выполнения следующих задач:

  • Создание профилей JDK Flight Recorder (JFR) по запросу с виртуальной машины Java (JVM).
  • Автоматическое создание профилей JFR при соблюдении определенных условий триггера из JVM, таких как превышение заданного порогового значения для ЦП или памяти.

Обзор

Профилировщик Java Application Insights использует профилировщик JFR, предоставляемый JVM, для записи данных профилирования, позволяя пользователям скачивать записи JFR позднее и анализировать их, чтобы определить причину проблем с производительностью.

Эти данные собираются по запросу при выполнении условий триггера. Доступные триггеры — это пороговые значения для использования ЦП, потребления памяти и запроса (триггеры соглашения на уровне обслуживания). Триггеры запросов отслеживают диапазоны, созданные OpenTelemetry, и позволяют пользователю настраивать требования соглашения об уровне обслуживания (SLA) в течение длительности этих диапазонов.

При достижении порогового значения собирается и передается профиль настроенного типа и длительности. Затем этот профиль отображается в области производительности связанного пользовательского интерфейса портала Application Insights.

Предупреждение

Профилировщик JFR по умолчанию выполняет профиль profile-without-env-data. JFR-файл содержит ряд событий, создаваемых виртуальной машиной Java. Конфигурация profile-without-env-data аналогична конфигурации профиля, которая поставляется с виртуальной машиной Java, однако отключены некоторые события, которые могут содержать конфиденциальные сведения о развертывании, такие как переменные среды, аргументы, предоставленные виртуальной машине Java, и процессы, выполняющиеся в системе.

Флаги, которые больше не доступны:

  • jdk.JVMInformation
  • jdk.InitialSystemProperty
  • jdk.OSInformation
  • jdk.InitialEnvironmentVariable
  • jdk.SystemProcess

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

Сведения о настройке конфигурации профилировщика см. в разделе Настройка содержимого профиля.

Необходимые компоненты

  • JVM с возможностью JFR
    • Java 8 с обновлением 262 и более поздним
    • Java 11 и более поздние версии

Предупреждение

OpenJ9 JVM не поддерживается

Использование

Триггеры

Более подробное описание доступных триггеров см. в обзоре профилировщика.

Агент Java ApplicationInsights отслеживает длительность ЦП, памяти и запроса, например бизнес-транзакцию. Если он нарушает настроенное пороговое значение, активируется профиль.

Профилировать

Кнопка "Профиль" находится в пользовательском интерфейсе профилировщика (см. параметры профилировщика). При выборе этой кнопки немедленно запрашиваются профиль во всех агентах, подключенных к экземпляру Application Insights. Длительность профилирования по умолчанию составляет две минуты. Его можно изменить, переопределив periodicRecordingDurationSeconds (см . файл конфигурации).

Предупреждение

Вызов профиля теперь включает функцию профилировщика, а Application Insights будет применять триггеры обслуживания ЦП и памяти по умолчанию. Когда приложение нарушает эти соглашения об уровне обслуживания, Application Insights собирает профили Java. Если вы хотите отключить профилирование позже, это можно сделать в меню триггера, показанном в разделе "Установка".

ЦП

Пороговое значение для ЦП — это процент использования всех доступных ядер в системе.

Например, если одно из восьми ядер полностью занято, это будет 12,5 % ЦП.

Память

Процент памяти — это текущее заполнение области памяти Tenured (OldGen) как доля от максимально возможного размера области.

Заполнение оценивается после того, как выполняется сбор на срок действия. Максимальный размер региона пребывания — это размер, если куча виртуальных машин Java (JVM) выросла до максимального размера.

Например, рассмотрим следующий сценарий:

  • Куча Java может увеличиться до максимума 1024 мб.
  • Поколение Tenured может вырасти до 90 % кучи.
  • Максимальный размер пребывания в должности составляет 922 МБ.
  • В пользовательском интерфейсе задано пороговое значение 75 %, а 75 % от 922 МБ — 691 МБ.

В этом сценарии профиль возникает в следующих обстоятельствах:

  • Выполняется полная сборка мусора
  • Заполнение областей Tenured превышает 691 МБ после сбора

Запросить

Триггеры SLA основаны на OpenTelemetry, и они инициируют профиль, если определенные критерии выполнены.

Каждая отдельная конфигурация триггера формируется следующим образом:

  • Name — уникальный идентификатор триггера.
  • Filter — фильтрует запросы, интересующие триггера.
  • Aggregation — вычисляет соотношение запросов, которые нарушили заданное пороговое значение.
    • Threshold — минимальное значение (в миллисекундах), в котором определяется нарушение запроса.
    • Minimum samples — Минимальное количество примеров, которые необходимо собрать для агрегирования для получения данных, это параметр заключается в том, чтобы предотвратить активацию небольших размеров выборки.
    • Window — скользящей временной интервал (в миллисекундах).
  • Threshold — пороговое значение (процент), примененное к выходным данным агрегирования. Если это значение превышено, инициируется профиль.

Например, следующий сценарий активирует профиль, если: более 75 % запросов к определенной конечной точке (/users/.*) занимает больше 30 мс в 60-секундном окне, когда были собраны по крайней мере 100 примеров.

Снимок экрана: пример триггера запроса

Установка

Ниже описано, как включить компонент профилирования для агента и настроить ограничения ресурсов, которые активируют профиль при нарушении.

  1. Настройте пороговые значения ресурсов, которые вызывают сбор профиля:

    1. Перейдите к разделу "Производительность —> Профилировщик" экземпляра Application Insights. Снимок экрана: ссылка на открытие области производительности.Снимок экрана: кнопка Профилировщика на панели

    2. Выберите "Триггеры".

    3. Настройте необходимые триггеры ЦП, памяти или запроса (если включено) и нажмите кнопку "Применить". Снимок экрана: параметры триггера

Предупреждение

Профилировщик Java не поддерживает триггер "Выборка". Если его настроить, ничего не произойдет.

После выполнения этих действий агент будет отслеживать использование ресурсов процесса и активировать профиль при превышении порогового значения. Когда профиль активируется и завершается, он доступен для просмотра из экземпляра Application Insights в разделе Performance —> Profiler. На этом экране можно скачать профиль, после скачивания файла записи JFR можно открыть и проанализировать в средстве выбора, например Oracle JDK Mission Control (JMC).

Снимок экрана: функции и параметры на странице профилировщика.

Настройка

Параметры запуска профилировщика, такие как пороговые значения и периоды профилирования, задаются в пользовательском интерфейсе Application Insights в разделе "Производительность", "Профилировщик", "Триггеры", как описано в разделе Установка.

Кроме того, многие параметры можно настроить с помощью переменных среды и файла конфигурации applicationinsights.json.

Настройка содержимого профиля

Если вы хотите предоставить настраиваемую конфигурацию профиля, измените memoryTriggeredSettings и cpuTriggeredSettings, чтобы указать путь к файлу .jfc с требуемой конфигурацией.

Профили можно создавать и изменять в пользовательском интерфейсе JDK Mission Control (JMC) в меню Window->Flight Recording Template Manager, а отдельные флаги можно контролировать в разделе Edit->Advanced.

Переменные среды

  • APPLICATIONINSIGHTS_PREVIEW_PROFILER_ENABLED: логическое значение (по умолчанию: true). Включает или отключает функцию профилирования. По умолчанию эта функция включена в агенте (начиная с агента 3.4.9). Однако, даже если эта функция включена в агенте, профили не собираются, если не включены на портале, как описано в разделе "Установка".

Файл конфигурации

Пример конфигурации:

{
  "preview": {
    "profiler": {
      "enabled": true,
      "cpuTriggeredSettings": "profile-without-env-data",
      "memoryTriggeredSettings": "profile-without-env-data",
      "manualTriggeredSettings": "profile-without-env-data",
      "enableRequestTriggering": true,
      "periodicRecordingDurationSeconds": 60
    }
  }
}

memoryTriggeredSettings Эта конфигурация используется, если требуется профиль памяти. Возможные значения:

  • profile-without-env-data (значение по умолчанию). Профиль с отключенными конфиденциальными событиями см. в разделе "Предупреждение".
  • profile. Использует конфигурацию profile.jfc, которая поставляется с JFR.
  • Путь к пользовательскому файлу конфигурации jfc в файловой системе, например /tmp/myconfig.jfc.

cpuTriggeredSettings Эта конфигурация используется, если требуется профиль ЦП. Возможные значения:

  • profile-without-env-data (значение по умолчанию). Профиль с отключенными конфиденциальными событиями см. в разделе "Предупреждение".
  • profile. Использует конфигурацию profile.jfc jfc, которая поставляется с JFR.
  • Путь к пользовательскому файлу конфигурации jfc в файловой системе, например /tmp/myconfig.jfc.

manualTriggeredSettings Эта конфигурация используется, если запрашивается профиль вручную. Возможные значения:

  • profile-without-env-data (значение по умолчанию). Профиль с отключенными конфиденциальными событиями см. в разделе "Предупреждение".
  • profile. Использует конфигурацию profile.jfc jfc, которая поставляется с JFR.
  • Путь к пользовательскому файлу конфигурации jfc в файловой системе, например /tmp/myconfig.jfc.

enableRequestTriggering Следует ли активировать профилирование JFR на основе конфигурации запроса. Возможные значения:

  • true Профилирование активируется, если порог триггера запроса нарушается.
  • false (значение по умолчанию). Конфигурация запроса не активирует профилирование.

periodicRecordingDurationSeconds Длительность записи профилирования в секундах при запуске сеанса профилирования с помощью кнопки "Профиль сейчас ". Значение по умолчанию — 120.

Часто задаваемые вопросы

Что такое Профилирование Java для Application Insights в Azure Monitor?

Профилировщик Java для Application Insights в Azure Monitor использует JFR для профилирования приложения с помощью пользовательской конфигурации.

Что такое записыватель полетов Java?

Java Flight Recorder (JFR) — это средство для сбора данных профилирования запущенного приложения Java. JFR интегрирован в виртуальную машину Java (JVM) и используется для устранения неполадок с производительностью. Узнайте больше о среде выполнения Java SE JFR.

Какая плата взимается за профилирование Java в App Insights?

Профилирование Java — это бесплатная функция с Application Insights. Цены на Application Insights в Azure Monitor зависят от стоимости приема.

Какие сведения о профилировании Java собираются?

Данные профилирования, собранные JFR, включают данные профилирования методов и выполнения, данные сборки мусора и профили блокировки.

Как использовать профилирование Java в App Insights и визуализировать данные?

Запись JFR можно просматривать и анализировать с помощью инструмента по вашему выбору, например Java Mission Control (JMC).

Предоставляется ли диагностика производительности и рекомендации по ее повышению с помощью профилирования Java в App Insights?

"Производительность диагностика и рекомендаций" — это новая функция, которая доступна сразу после диагностики Java Application Insights. Вы можете зарегистрироваться для предварительной версии этой функции. Запись JFR можно просмотреть с помощью Java Mission Control (JMC).

В чем разница между профилированием по запросу и автоматическим профилированием Java в App Insights?

По запросу профилирование запускается пользователем в режиме реального времени, тогда как автоматическое профилирование выполняется с предварительно настроенными триггерами.

Нажмите кнопку Профилировать, чтобы выполнить профилирование по запросу. Профиль теперь немедленно профилируют все агенты, подключенные к экземпляру Application Insights.

Автоматическое профилирование запускается при превышении порогового значения ресурса.

Какие триггеры профилирования Java можно настроить?

Агент Java Application Insights в настоящее время поддерживает мониторинг потребления ЦП и памяти. Пороговое значение ЦП настраивается в процентах от всех доступных ядер на машине. Память — это текущее заполнение области памяти Tenured (OldGen) как доля от максимально возможного размера области.

Каковы предварительные требования для включения профилирования Java?

Просмотрите предварительные требования в верхней части этой статьи.

Можно ли использовать профилирование Java в приложении для микрослужб?

Да, с помощью JFR вы можете профилировать виртуальную машину Java, на которой выполняются микрослужбы.