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


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

Примечание.

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

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

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

Обзор

Java Profiler использует профилировщик 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 не поддерживается

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

Триггеры

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

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

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

Кнопка "Профиль" находится в пользовательском интерфейсе профилировщика (см. раздел "Настройка Профилировщика Application Insights для .NET"). При выборе этой кнопки немедленно запрашиваются профиль во всех агентах, подключенных к экземпляру 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. Перейдите к разделу Performance ->Profiler экземпляра Application Insights.

    Снимок экрана: кнопка Профилировщика на панели

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

Кнопка трассы профилировщика в нижнем правом углу не поддерживается для Java.

  1. Выбор триггеров

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

    Снимок экрана: параметры триггера.

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

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

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

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

Настройка

Настройка параметров триггера Java Profiler, таких как пороговые значения и периоды профилирования, устанавливается в пользовательском интерфейсе Application Insights в ", как описано в >

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

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

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

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

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

  • APPLICATIONINSIGHTS_PREVIEW_PROFILER_ENABLED: boolean (по умолчанию: 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.

Дальнейшие шаги