Профилировщик 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) в течение длительности этих диапазонов.

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

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

Профилировщик 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 отслеживает длительность ЦП, памяти и запроса, например бизнес-транзакцию. Если он нарушает настроенное пороговое значение, активируется профиль.

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

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

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

Вызов профиля теперь включает функцию профилировщика, а приложение Аналитика будет применять триггеры обслуживания ЦП и памяти по умолчанию. Когда приложение нарушает эти соглашения об уровне обслуживания, приложение Аналитика собирает профили 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 примеров.

Screenshot of request trigger sample

Установка

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

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

    1. Перейдите к разделу "Производительность —> Профилировщик" экземпляра Application Insights. Screenshot of the link to open performance pane.Screenshot of the Profiler button from the Performance pane.

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

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

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

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

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

Screenshot of profiler page features and settings.

Настройка

Параметры запуска профилировщика, такие как пороговые значения и периоды профилирования, задаются в пользовательском интерфейсе 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 в Azure Monitor зависят от стоимости приема.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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