Java 가상 머신 모니터링 ( JVM )

Instana 를 사용하면 Java 가상 머신( JVM )을 종합적으로 모니터링하여 병목 현상을 파악하고 성능을 최적화할 수 있습니다. JVM 를 모니터링하려면 Instana 호스트 에이전트를 설치하십시오. 에이전트를 설치하면 ‘ Instana ’ Java 센서가 자동으로 활성화되어, Instana UI에서 확인할 수 있는 실시간 메트릭 및 추적 데이터를 수집합니다.

Java 센서는 지원되는 기술에 대한 자동화된 코드 계측 기능, JVM 인스턴스에 대한 설정 없이도 가능한 상태 모니터링, 그리고 모든 시스템을 아우르는 요청의 종단 간 추적 기능을 제공합니다.

보충 자료

Java 센서는 다음 언어, 운영 체제 및 런타임을 지원합니다:

지원 운영 체제

Java 센서는 호스트 에이전트의 요구 사항에 부합하는 운영 체제를 지원하며, 이는 각 호스트 에이전트의 ‘지원되는 운영 제’ 섹션에서 확인할 수 있습니다. 예를 들어, ‘ Unix 용 지원되는 운영 체제’를 참조하십시오.

Instana 에이전트 설치

JVM 을 모니터링하려면 Instana 호스트 에이전트를 설치해야 합니다. 자세한 내용은 ‘호스트 에이전트 설치’를 참조하십시오. 에이전트가 Java 센서를 자동으로 배포, 구성 및 설치합니다. Java 애플리케이션에 계측 기능이 적용되도록 하려면, 사용 중인 JVM 배포판이 지원되는지 확인하십시오.

참고: 여러 공급업체의 에이전트를 동시에 사용하지 마십시오. 예상치 못한 결과가 발생하여 애플리케이션이 중단될 수 있습니다. 자세한 내용은 ‘호환되지 않는 에이전트’를 참조하십시오.

모니터링 대상에서 JVM 제외

Instana 에이전트가 JVM 에 연결되는 것을 방지하려면, JVM 환경에서 환경 INSTANA_IGNOREtrue 변수를 로 설정할 수 있습니다.

선택 사항: 센서 설정

Instana 에이전트를 설치하면 Java 센서가 자동으로 설치 및 구성됩니다. 즉시 사용 가능한 지표 및 분산 추적에 대한 구성이 필요하지 않더라도 센서의 개별 구성요소를 구성할 수 있습니다.

센서 구성에 대한 자세한 내용은 ‘ Java 센서 구성’을 참조하십시오.

Java 센서가 구성되면, JVM 에서 메트릭 수집이 자동으로 시작됩니다. 이 지표들은 Instana UI에서 확인할 수 있습니다. Java 센서는 자동 추적, 사용자 지정 추적, 자동 프로파일링과 같은 Instana 의 다른 기능들도 지원합니다.

메트릭 콜렉션

Java 센서는 JVM 인스턴스를 모니터링하며, 해당 인스턴스에서 다음과 같은 메트릭을 수집합니다:

이러한 메트릭을 보려면 다음 단계를 완료하십시오.

  1. Instana UI의 사이드바에서 ‘인프라’를 선택합니다.
  2. 모니터되는 특정 호스트를 클릭하십시오.

JVM 대시보드에는 JVM 인스턴스에 대해 수집된 모든 메트릭이 표시됩니다.

구성 데이터

다음 표에는 JVM 인스턴스에서 수집된 구성 데이터가 나열되어 있습니다:

구성 설명
Java 버전 JVM 에서 사용하는 Java 버전
Java 런타임 Java 런타임 환경(JRE) 구현
최대 힙 JVM 에서 사용할 수 있는 최대 힙 크기
클래스 경로 JVM 에 설정된 클래스 경로 매개변수
JVM 인수 JVM 에 전달되는 시작 옵션 및 구성 매개변수
서비스 Instana 에서 식별하고 모니터링하는 논리적 서비스 이름

성능 매트릭

다음과 같은 성능 지표가 JVM 인스턴스에서 수집됩니다:

메모리 메트릭

다음 표는 JVM 에서 메모리 사용량을 측정하는 데 사용되는 메모리 지표들을 요약한 것입니다:

성능 메트릭 설명 데이터 소스 단위
사용된 메모리 JVM 가 현재 사용 중인 총 메모리 java.lang.Runtime#totalMemory 바이트
힙 메모리 JVM 에서 사용할 수 있는 최대 힙 크기 - 사용 중인 힙 메모리: 와 의 차이 java.lang.Runtime#totalMemory . - 최대 힙 크기: 명령줄 java.lang.Runtime#freeMemory-Xmx 매개변수를 분석하여 결정되거나 에서 수집됨 java.lang.Runtime#maxMemory. - 힙 메모리 사용률: (사용 중인 힙 메모리 / 총 힙 메모리) * 100 java.lang.Runtime 메소드 바이트 또는 백분율 (%)
메모리 풀 선택한 기간 동안의 힙 및 비힙 풀의 메모리 풀 사용량을 그래프로 표시 ManagementFactory#getMemoryPoolMXBeans 바이트
사용 중 JVM 가 현재 사용하고 있는 힙 메모리의 크기 (사용량 및 활용도) java.lang.management.MemoryUsage 사용법: MiB 활용도: 백분율 (%)
수영장 JVM 가 관리하는 메모리 영역의 이름 ManagementFactory#getMemoryPoolMXBeans
유아기 JVM 시작 시 할당된 초기 메모리 크기 getInit 바이트
최대 JVM 가 해당 풀에 할당할 수 있는 최대 메모리 크기 getMax 바이트
현재 사용 중인 메모리 용량 getUsage 바이트

스레드 지표

다음 표는 스레드 메트릭과 관련된 정보를 요약한 것입니다:

성능 메트릭 설명 데이터 소스 단위
스레드 선택한 기간 동안 그래프에 표시된 서로 다른 상태에 있는 스레드 수: new, runnable, timed-waiting, waiting, 또는 blocked java.lang.management.ThreadMXBean#getAllThreadIds 개수
새로 작성 생성되었으나 아직 시작되지 않은 스레드 수 ThreadMXBean#getThreadInfo 개수
실행 가능 / 실행 가능한 실행 가능하고 CPU 실행 대상이 될 수 있는 스레드 수 ThreadMXBean#getThreadInfo 개수
제한시간 초과-대기 중 지정된 시간 동안 대기 중인 스레드 수 ThreadMXBean#getThreadInfo 개수
대기 지정된 시간 동안 대기 중인 스레드 수 ThreadMXBean#getThreadInfo 개수
차단됨 잠금을 획득하기 위해 대기 중 차단된 스레드 수 ThreadMXBean#getThreadInfo 개수

가비지 컬렉션(GC) 지표

다음 표는 가비지 컬렉션 지표와 관련된 정보를 요약한 것입니다:

성능 지표 설명 데이터 소스 단위
가비지 콜렉션 선택한 기간 동안 그래프로 표시된 가비지 컬렉션 활성화 및 런타임 값 - 가비지 컬렉션 정보: ManagementFactory#getGarbageCollectorMXBeans - 그래프 값: java.lang.management.GarbageCollectorMXBean
PS: 수거 시간 Young 영역에서 GC에 소요된 총 시간 (Eden + Survivor) (소규모 GC) getCollectionTime 밀리초
PS MarkSweep 시간 구 영역에서 GC에 소요된 총 시간 (주요 GC) getCollectionTime 밀리초
PS 수색 요청 사소한 GC 실행 횟수 getCollectionCount 개수
추신: MarkSweep 관련 문의 주요 GC 실행 횟수 getCollectionCount 개수
참고:
  • `getCollectionTime` 그리고 `getCollectionCount` 값은 1‑second 구간에서 계산된 미분값입니다.
  • `getCollectionTime` 누적된 가비지 컬렉션에 소요된 대략적인 시간(밀리초 단위)입니다.
  • `getCollectionCount` 호출 횟수입니다.

애플리케이션 지표

다음 표는 애플리케이션 성능 지표와 관련된 정보를 요약한 것입니다:

성능 메트릭 설명 데이터 소스 단위
정지 / 중단 지난 1초 동안 JVM, 운영 체제 또는 CPU 스케줄링으로 인해 애플리케이션 실행 시간이 지연되었습니다. 앱 내 ‘ Instana ’ 측정 스레드에 따라 계산되었습니다. 밀리초

파생 지표

다음 표에는 JVM 인스턴스에서 계산된 성능 지표를 기반으로 도출된 사용 가능한 지표들이 나열되어 있습니다:

성능 매트릭 설명 데이터 소스 메트릭 이름
가비지 컬렉션 후 메모리 가비지 컬렉션(GC) 이벤트가 발생한 후 애플리케이션이 사용하는 메모리 양. JVM 센서가 전체 가비지 컬렉션 호출을 보고하면, 그 시점의 메모리 값이 ‘가비지 컬렉션 후 메모리(Memory After GC)’ 값으로 보고됩니다. 메모리 사용량 통계 및 가비지 컬렉션 이벤트 memory.gc.after
가비지 컬렉션 전 메모리 가비지 컬렉션(GC) 이벤트가 발생하기 전까지 애플리케이션이 사용하는 메모리 양. JVM 센서가 전역 가비지 컬렉션 호출을 보고할 때, 이 호출 직전의 메모리 값이 ‘Memory Before GC’ 값으로 보고됩니다. 메모리 사용량 통계 및 가비지 컬렉션 이벤트 memory.gc.before
가비지 컬렉션 후 메모리 사용률 가비지 컬렉션(GC) 이벤트가 발생한 후 애플리케이션이 사용하는 전체 사용 가능 메모리의 비율. 이는 전역 가비지 컬렉션 후 사용 중인 메모리의 비율로, JVM 가 사용한 최대 메모리를 기준으로 한 것입니다. 메모리 사용량 성능 통계, 최대 메모리 사용량 및 가비지 컬렉션 통계 memory.gc.afterPercentage
GC 전 메모리 사용률 가비지 컬렉션(GC)이 발생하기 전까지 애플리케이션이 사용하는 메모리의 비율. 이는 전역 가비지 컬렉션이 수행되기 전, JVM 가 사용한 최대 메모리 용량 대비 사용 중인 메모리의 비율을 나타냅니다. 메모리 사용량 성능 통계, 최대 메모리 사용량 및 가비지 컬렉션 통계 memory.gc.beforePercentage

건강 지표

각 센서에는 수신 메트릭에 대해 지속적으로 평가되는 상태 서명의 큐레이트된 지식 기반이 있습니다. 이러한 상태 서명은 사용자 영향에 따라 문제 또는 인시던트를 발생시키는 데 사용됩니다.

내장 이벤트는 엔티티의 상태 지표가 정상 범위를 벗어날 경우 이슈나 인시던트를 발생시키며, 사용자 정의 이벤트는 특정 엔티티의 개별 메트릭 임계값을 기준으로 이슈나 인시던트를 발생시킵니다.

Java 센서의 기본 제공 이벤트에 대한 자세한 내용은 ‘기본 제공 이벤트 참조’를 참조하십시오.

사용자 정의 메트릭

Instana 일부 일반적인 Java 메트릭스 라이브러리를 지원합니다. 다음 라이브러리를 사용하는 경우, 애플리케이션 코드를 수동으로 계측하여 사용자 지정 메트릭을 수집할 수 있습니다:

자세한 내용은 사용자 지정 추적 항목을 참조하십시오.

Dropwizard 지표를 활용한 맞춤형 JVM 모니터링

JVM 가 Dropwizard 메트릭 라이브러리를 로드하면, 사용자 지정 메트릭이 수집되어 JVM 대시보드에 표시됩니다. 백엔드의 과부하를 방지하기 위해 메트릭에 200 대한 기본 제한이 설정되어 있습니다.

수집되는 메트릭의 제한을 비활성화하거나 변경하려면 다음 구성을 사용하십시오:

com.instana.plugin.java:
  dropwizardMetricCollection:
    enabled: false
    limit: 200
 

Dropwizard 프레임워크의 일환으로 Dropwizard 메트릭을 사용하고 있다면, Dropwizard 모니터링을 참조하십시오.

기타 메트릭

Java 센서는 구성, 성능 및 사용자 정의 메트릭 외에도 라이브 스레드 덤프 및 힙 덤프와 같은 다른 메트릭도 수집합니다.

실시간 스레드 덤프

JVM 의 실시간 스레드 덤프를 보려면 ‘스레드 덤프 가져오기’를 클릭하세요.

힙 덤프

JVM 의 힙 덤프를 생성하려면 ‘힙 덤프 가져오기’를 클릭하십시오. 힙 덤프를 저장하려면 JVM 의 로컬 위치를 지정하십시오.

Java 애플리케이션 추적

Instana 의 ` Java ` 센서는 다음 메서드를 사용하여 ` Java ` 애플리케이션을 추적합니다:

  • Instana AutoTrace : 수동 설정이나 코드 변경 없이도 Java 애플리케이션의 추적을 자동으로 수행합니다.
  • 사용자 지정 추적 : Java 애플리케이션 코드의 특정 부분에 수동으로 추적 코드를 삽입하여 사용자 지정 메트릭을 수집하고 더 심층적인 인사이트를 확보합니다.
  • Instana AutoProfile : Java 애플리케이션에 대한 자동 프로파일링 기능은 성능, CPU 사용량, 메모리 할당 및 기타 시스템 리소스에 대한 상세한 정보를 제공합니다.

Instana AutoTrace

기본적으로 Java 센서는 모든 요청을 모니터링하고 각 요청에 대해 자동으로 분산 추적을 생성합니다. 이 분산 추적 기능에는 호스트 간 및 언어 간 추적 기능이 포함됩니다. 자세한 내용은 Instana AutoTrace™ 을 참조하십시오.

Instana UI에서 이러한 트레이스를 확인할 수 있습니다. 자세한 내용은 ‘추적 및 호출 분석’을 참조하십시오.

로깅

레벨 WARN 이상인 로그만 볼 수 있습니다.

Log4j, Log4j2 또는 Logback 를 사용하여 로깅과 추적 간의 상관관계를 더욱 정확하게 설정하면, Instana 는 추적 ID를 Mapped Diagnostic Context(MDC)에 자동으로 입력합니다. MDC 변수 이름은 instana.trace.id입니다. 형식 문자열에서 로깅 프레임워크 사용에 대한 자세한 정보는 로깅 프레임워크에 대한 문서를 참조하십시오.

사용자 정의 추적

Java 센서는 설치 즉시 사용할 수 있는 완전 자동화된 추적 계측 기능을 제공합니다. 하지만 경우에 따라서는 사용자 지정 추적 데이터를 Instana 대시보드로 전송하는 것을 선호할 수도 있습니다. 다음 메소드를 사용하여 사용자 정의 추적을 구현할 수 있습니다.

Java Trace SDK

Instana 에서 아직 지원되지 않는 프레임워크에 인스트루멘테이션을 적용하거나 사용자 정의 애플리케이션의 요청을 모니터링하려면, Java Trace SDK를 사용하고 GitHub 저장소를 참조하십시오.

SDK를 사용하여 사용자 지정 추적 기능을 구현하기 전에, 추적 모범 사례를 확인하시기 바랍니다.

구성 기반 Java 추적 SDK

소스 코드를 직접 수정하거나 이를 수행할 수 있는 담당자에게 문의해야 하는 ‘ Java Trace SDK’를 사용하는 것이 현실적으로 어렵거나 바람직하지 않은 상황이 발생할 수 있습니다. 이러한 경우에는 구성 기반의 Java Trace SDK 를 사용하십시오. 프로그래매틱 방식 의 Java Trace SDK보다는 기능이 다소 제한적이지만, 구성 기반의 Java Trace SDK를 사용하면 다양한 일반적인 사용 사례를 포괄하는 스팬과 태그를 선언적 방식으로 구성할 수 있습니다.

구성 기반 Java Trace SDK를 사용하여 사용자 지정 추적 기능을 구현하기 전에, 추적 모범 사례를 확인하십시오.

Java OpenTracing API

OpenTracing ( API )를 통해 설명된 추적을 수집하려면 Java ( OpenTracing )를 사용해야 합니다. 자세한 내용은 OpenTracing 을 참조하십시오.

중요: Java OpenTracing API 를 사용하기 전에 자동 추적 기능을 비활성화하십시오( Instana AutoTrace™ ). 자세한 내용은 ‘ Java 추적 계측 기능 비활성화’를 참조하십시오.

OpenCensus Instana 추적 내보내기

Instana Java 로 작성된 애플리케이션을 위한 OpenCensus Trace Exporter 를 제공합니다. Instana 는 Instana 에이전트 프로세스를 프록시로 사용하여, Census가 적용된 애플리케이션에서 내보낸 추적 정보를 백엔드로 전달합니다.

자세한 내용은 OpenCensus 의 ‘수출업체’ 항목을 참조하십시오.

중요: 에이전트가 Census와 동일한 호스트에서 사용되는 경우 자동 추적 기능을 비활성화하십시오( Instana AutoTrace™ ). 자세한 내용은 ‘ Java 추적 계측 기능 비활성화’를 참조하십시오.

Instana AutoProfile

프로파일은 코드 레벨에서 성능 핫 스팟 및 병목을 찾는 데 중요합니다. 자원 이용을 줄이고 성능을 향상하는 데 유용합니다.

Instana AutoProfile™ 프로세스 프로필을 생성하여 Instana 에 보고합니다. 개발 단계나 주문형 프로파일러의 경우 프로파일링을 수동으로 시작해야 하는 것과 달리, AutoProfile™ 는 중요한 운영 환경에 적합한 프로파일링을 자동으로 예약하고 지속적으로 수행합니다.

자세한 내용은 Instana AutoProfile™ 을 참조하십시오.

JVM 제외

JVM 환경에서 환경 INSTANA_IGNOREtrue 변수를 로 설정하면 Instana 에이전트가 JVM 에 연결되는 것을 방지할 수 있습니다.