다음을 통해 공유


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의 성능 창 내에 이 프로필이 표시됩니다.

Warning

기본적으로 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 이상

Warning

OpenJ9 JVM은 지원되지 않음

사용

트리거

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

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

지금 프로파일링

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

Warning

이제 프로필을 호출하면 프로파일러 기능이 활성화되고 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%까지 증가할 수 있습니다.
  • 최대 종신 가능 크기는 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 단추의 스크린샷.

  2. 트리거 선택

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

    트리거 설정의 스크린샷.

Warning

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

이러한 단계가 완료되면 에이전트는 프로세스의 리소스 사용을 모니터링하고 임계값을 초과하면 프로필을 트리거합니다. 프로필이 트리거되고 완료되면 성능 ->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입니다.

자주 묻는 질문

Azure Monitor Application Insights Java 프로파일링이란 무엇인가요?

Java Profiler는 JFR(Java Flight Recorder)을 사용하여 사용자 지정된 구성을 사용하여 애플리케이션을 프로파일러합니다.

Java Flight Recorder란?

JFR(Java Flight Recorder)는 실행 중인 Java 애플리케이션의 프로파일링 데이터를 수집하기 위한 도구입니다. JFR은 JVM(Java Virtual Machine)에 통합되며 성능 문제를 해결하는 데 사용됩니다. Java SE JFR 런타임에 대해 자세히 알아봅니다.

App Insights Java 프로파일링을 사용하도록 설정하기 위한 가격 및/또는 라이선스 요금의 의미는 무엇인가요?

Java 프로파일링은 Application Insights의 무료 기능입니다. Azure Monitor Application Insights 가격 책정은 수집 비용을 기반으로 합니다.

수집되는 Java 프로파일링 정보는 무엇인가요?

JFR에서 수집한 프로파일링 데이터에는 메서드와 실행 프로파일링 데이터, 가비지 수집 데이터, 잠금 프로필이 포함됩니다.

App Insights Java 프로파일링을 사용하고 데이터를 시각화하는 방법은 무엇인가요?

JFR 레코딩은 원하는 도구(예: JMC(Java Mission Control))를 사용하여 보고 분석할 수 있습니다.

성능 진단 및 수정 권장 사항이 App Insights Java 프로파일링과 함께 제공되었나요?

'성능 진단 및 권장 사항'은 Application Insights Java Diagnostics로 곧 제공될 새로운 기능입니다. 이 기능을 미리 보려면 등록합니다. JMC(Java Mission Control)를 사용하여 JFR 기록을 볼 수 있습니다.

App Insights에서 주문형과 자동 Java 프로파일링의 차이점은 무엇인가요?

주문형은 실시간 사용자 트리거 프로파일링인 반면 자동 프로파일링은 미리 구성된 트리거를 사용합니다.

주문형 프로파일링 옵션으로 지금 프로파일링을 사용합니다. 지금 프로파일링은 Application Insights 인스턴스에 연결된 모든 에이전트를 즉시 프로파일링합니다.

자동화된 프로파일링은 리소스 임계값에 도달하여 트리거됩니다.

구성할 수 있는 Java 프로파일링 트리거는 무엇인가요?

Application Insights Java 에이전트는 현재 CPU 및 메모리 사용량 모니터링을 지원합니다. CPU 임계값은 컴퓨터에서 사용 가능한 모든 코어의 백분율로 구성됩니다. 메모리는 영역의 최대 가능 크기에 대한 현재 종신 메모리 영역(OldGen) 점유율입니다.

Java 프로파일링을 사용하도록 설정하는 데 필요한 필수 구성 요소는 무엇인가요?

이 문서의 맨 위에 있는 필수 조건을 검토합니다.

마이크로 서비스 애플리케이션에 Java 프로파일링을 사용할 수 있나요?

예, JFR을 사용하여 마이크로 서비스를 실행하는 JVM을 프로파일링할 수 있습니다.