다음을 통해 공유


Java용 Azure Monitor Application Insights Profiler

참고

Java Profiler 기능은 3.4.0부터 미리 보기로 제공됩니다.

Java Profiler는 다음을 위한 시스템을 제공합니다.

  • JVM(Java Virtual Machine)에서 요청 시 JFR(JDK Flight Recorder) 프로필을 생성합니다.
  • 구성된 임계값을 위반하는 CPU 또는 메모리와 같은 특정 트리거 조건이 JVM에서 충족될 때 JFR 프로필을 자동으로 생성합니다.

개요

Java Profiler는 JVM에서 제공하는 JFR 프로파일러를 사용하여 프로파일링 데이터를 기록하므로 사용자는 나중에 JFR 녹음을 다운로드하고 분석하여 성능 문제의 원인을 식별할 수 있습니다.

이 데이터는 트리거 조건이 충족될 때 요청 시 수집됩니다. 사용량 가능한 트리거로는 CPU 사용량, 메모리 사용량, 요청(서비스 수준 계약 트리거)에 대한 임계값이 있습니다. 요청 트리거는 OpenTelemetry에서 생성된 범위를 모니터링하고 사용자가 해당 범위 기간 동안 SLA(서비스 수준 계약) 요구 사항을 구성할 수 있도록 합니다.

임계값에 도달하면 구성된 형식 및 기간의 프로필이 수집되어 업로드됩니다. 그러면 연결된 Application Insights 포털 UI의 성능 창 내에 이 프로필이 표시됩니다.

경고

기본적으로 JFR 프로파일러에서 “profile-without-env-data” 프로필을 실행합니다. JFR 파일은 JVM에서 내보낸 일련의 이벤트입니다. “프로필 없는 env-data” 구성은 JVM과 함께 제공되는 “프로필” 구성과 유사합니다. 그러나 환경 변수, JVM에 제공된 인수, 시스템에서 실행되는 프로세스와 같은 중요한 배포 정보를 포함할 가능성이 있는 일부 이벤트가 사용하지 않도록 설정되었습니다.

더 이상 사용할 수 없는 플래그는 다음과 같습니다.

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

그러나 사용하도록 설정된 모든 플래그를 검토하여 프로필에 중요한 데이터가 포함되지 않도록 해야 합니다.

사용자 지정 프로파일러 구성 설정에 대한 프로필 콘텐츠 구성을 참조하세요.

필수 조건

  • JFR(Java Flight Recorder) 기능이 있는 JVM

    • Java 8 업데이트 262 이상
    • Java 11 이상

경고

OpenJ9 JVM은 지원되지 않음

사용

트리거

사용 가능한 다양한 트리거에 대한 자세한 설명은 .NET용 Application Insights Profiler를 사용하여 Azure의 프로필 프로덕션 애플리케이션을 참조하세요.

ApplicationInsights Java Agent는 CPU, 메모리 및 비즈니스 트랜잭션과 같은 요청 기간을 모니터링합니다. 구성된 임계값을 위반하면 프로필이 트리거됩니다.

프로필 보기

프로필 지금 단추는 프로파일러 사용자 인터페이스에 있습니다(.NET용 Application Insights Profiler 구성 참조). 이 단추를 선택하면 Application Insights 인스턴스에 연결된 모든 에이전트의 프로필이 즉시 요청됩니다. 기본 프로파일링 기간은 2분입니다. periodicRecordingDurationSeconds를 재정의하여 변경할 수 있습니다(구성 파일 참조).

경고

이제 프로필을 호출하면 프로파일러 기능이 활성화되고 Application Insights가 기본 CPU 및 메모리 SLA 트리거를 적용합니다. 애플리케이션이 이러한 SLA를 위반하면 Application Insights는 Java 프로필을 수집합니다. 나중에 프로파일링을 사용하지 않도록 설정하려면 설치에 표시된 트리거 메뉴 내에서 프로파일링을 사용하지 않도록 설정할 수 있습니다.

CPU (중앙 처리 장치)

CPU 임계값은 시스템에서 사용 가능한 모든 코어 사용량의 백분율입니다.

예를 들어 8개 코어 컴퓨터의 코어 1개가 포화 상태이면 CPU 비율은 12.5%로 간주됩니다.

메모리

메모리 비율은 영역의 최대 가능 크기에 대한 현재 종신 메모리 영역(OldGen) 점유율입니다.

점유율이 종신 컬렉션이 수행된 후 평가됩니다. JVM(Java Virtual Machine) 힙이 최대 크기로 확장된 경우의 최대 종신 지역 크기입니다.

예를 들어 다음 시나리오를 수행합니다.

  • Java 힙은 최대 1024mb까지 증가할 수 있습니다.
  • Tenured Generation은 힙의 90%까지 증가할 수 있습니다.
  • "Tenured"의 최대 가능 크기는 922MB입니다.
  • 사용자 인터페이스를 통해 임계값이 75%로 설정되었으므로 임계값은 922mb의 75%인 691mb가 됩니다.

이 시나리오에서는 다음과 같은 상황에서 프로필이 발생합니다.

  • 전체 가비지 수집이 실행됩니다.
  • 영구 영역 점유가 수집 후 691MB를 초과했습니다.

요청

SLA 트리거는 OpenTelemetry를 기반으로 하며, 특정 기준이 충족되면 프로필을 시작합니다.

각 개별 트리거 구성은 다음과 같이 구성됩니다.

  • Name - 트리거의 고유 식별자입니다.
  • Filter - 트리거에 대한 관심 있는 요청을 필터링합니다.
  • Aggregation - 특정 임계값을 위반한 요청 비율을 계산합니다.
    • Threshold - 요청 위반이 발생한 것으로 판단되는 최솟값(밀리초)입니다.
    • Minimum samples - 데이터를 생성하기 위해 집계를 위해 수집해야 하는 최소 샘플 수입니다. 이 설정은 작은 샘플 크기로 인해 트리거되는 것을 방지하기 위한 것입니다.
    • Window - 롤링 기간(밀리초)입니다.
  • Threshold - 집계 출력에 적용되는 임계값(백분율)입니다. 이 값을 초과하면 프로필이 시작됩니다.

예를 들어, 다음 시나리오는 최소 100개의 샘플이 수집되었을 때 특정 엔드포인트(/users/.*)에 대한 요청의 75% 이상이 60초 기간 내에 30ms 이상 걸리는 경우 프로필을 트리거합니다.

요청 트리거 샘플의 스크린샷

설치

다음 단계에서는 에이전트에서 프로파일링 구성 요소를 사용하도록 설정하고 위반 시 프로필을 트리거하는 리소스 제한을 구성하는 과정을 안내합니다.

프로필이 수집되도록 하는 리소스 임계값을 구성합니다.

  1. Application Insights 인스턴스의 성능 ->Profiler 섹션으로 이동합니다.

    성능 블레이드를 여는 링크의 스크린샷. 성능 블레이드에서 Profiler 단추의 스크린샷.

경고

오른쪽 아래에 있는 프로파일러 추적 단추는 Java에서 지원되지 않습니다.

  1. 트리거 선택Triggers

  2. 필요한 CPU, 메모리 또는 요청 트리거(사용하도록 설정된 경우)를 구성하고 적용을 선택합니다.

    트리거 설정의 스크린샷.

경고

Java Profiler는 "샘플링" 트리거를 지원하지 않습니다. 이를 변경해도 아무런 영향을 주지 않습니다.

이러한 단계가 완료되면 에이전트는 프로세스의 리소스 사용을 모니터링하고 임계값을 초과하면 프로필을 트리거합니다. 프로필이 트리거되고 완료되면 성능의 Application Insights 인스턴스에서 볼 수 있습니다. 해당 화면에서 프로필을 다운로드할 수 있습니다. 다운로드한 후 JFR 녹음 파일을 열고 선택한 도구 내에서 분석할 수 있습니다(예: Oracle JMC(JDK Mission Control)).

Profiler 페이지 기능 및 설정의 스크린샷.

구성

임계값 및 프로파일링 기간과 같은 Java Profiler 트리거 설정의 구성은 설치에 설명된 대로 Application Insights UI의 >>트리거 섹션에서 설정됩니다.

또한 환경 변수 및 applicationinsights.json 구성 파일을 사용하여 많은 매개 변수를 구성할 수 있습니다.

프로필 콘텐츠 구성

사용자 지정 프로필 구성을 제공하려면, 필요한 구성을 사용하여 memoryTriggeredSettingscpuTriggeredSettings를 변경하고, 그 .jfc 파일에 대한 경로를 지정하십시오.

프로필은 Window->Flight Recording Template Manager 메뉴의 JMC(JDK Mission Control) 사용자 인터페이스에서 생성/편집할 수 있으며, 개별 플래그에 대한 제어는 이 사용자 인터페이스의 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; JFR과 함께 제공되는 profile.jfc 구성을 사용합니다.
  • 파일 시스템의 사용자 지정 jfc 구성 파일 경로입니다(예:/tmp/myconfig.jfc).

cpuTriggeredSettings 이 구성은 CPU 프로필이 요청된 경우 사용됩니다. 이 값은 다음 중 하나일 수 있습니다.

  • profile-without-env-data(기본값) 중요한 특정 이벤트가 비활성화된 프로필에 대한 자세한 내용은 경고 섹션을 참조하세요.
  • profile; JFR과 함께 제공되는 profile.jfc jfc 구성을 사용합니다.
  • 파일 시스템의 사용자 지정 jfc 구성 파일 경로입니다(예:/tmp/myconfig.jfc).

manualTriggeredSettings 이 구성은 수동 프로필이 요청된 경우 사용됩니다. 이 값은 다음 중 하나일 수 있습니다.

  • profile-without-env-data(기본값) 중요한 특정 이벤트가 비활성화된 프로필에 대한 자세한 내용은 경고 섹션을 참조하세요.
  • profile; JFR과 함께 제공되는 profile.jfc jfc 구성을 사용합니다.
  • 파일 시스템의 사용자 지정 jfc 구성 파일 경로입니다(예:/tmp/myconfig.jfc).

enableRequestTriggering 요청 구성에 따라 JFR 프로파일링을 트리거해야 하는지 여부를 나타냅니다. 이 값은 다음 중 하나일 수 있습니다.

  • true 요청 트리거 임계값이 위반되면 프로파일링이 트리거됩니다.
  • false(기본값) 요청 구성으로 인해 프로파일링이 트리거되지 않습니다.

periodicRecordingDurationSeconds 지금 프로파일링 단추를 사용하여 프로파일링 세션이 시작될 때 프로파일링 녹음 기간을 초 단위로 지정합니다. 기본값은 120입니다.

다음 단계