← ECS Fargate 모니터링
📊

03 / 06

JVM 메트릭

수집 가능한 JVM 내부 상태 지표, Heap Memory, GC, Thread, Metaspace, CPU 등

JVMHeapGCThread
아키텍처도입 배경JVM 메트릭ecs-discovery대시보드일정 & 비용

JVM Metrics

JVM 메트릭 개요

Prometheus + Grafana 모니터링 체계를 통해 수집 가능한 JVM 내부 상태 지표를 정리한다. ECS Fargate 환경에서는 CloudWatch만으로 JVM 레벨 메트릭을 확인할 수 없기 때문에, Spring Boot Actuator가 노출하는 Micrometer 기반 메트릭을 Prometheus가 수집하여 Heap Memory, GC, Thread, Metaspace, CPU 등 다수의 핵심 지표를 실시간으로 추적한다.

📊

6종+

수집 메트릭

⏱️

실시간

수집 주기

🛡️

조기 탐지

장애 예방

Metrics Detail

메트릭 상세

🧠

Heap Memory Used / Max

조기 탐지 가능

설명

JVM Heap 메모리 사용량 및 최대 할당량

문제 조기 탐지

요청/데이터 증가로 객체 급증, 캐시 또는 버퍼 누적 → OOM 경고 조기 인지

왜 탐지해야 하는가

Heap이 Xmx에 근접하면 Full GC 빈도 증가, 성능 저하, OOM으로 앱 다운 → 미리 경고하면 GC 튜닝 또는 Scale Up 기회 확보

♻️

GC Count / Time

조기 탐지 가능

설명

GC 동작 횟수 및 소요 시간

문제 조기 탐지

GC 동작 횟수 및 소요 시간 → 불필요한 GC 루프 탐지

왜 탐지해야 하는가

Full GC 반복 = 시스템 멈춤에 가까운 수준의 성능 저하 → GC 시간/횟수 증가 추이 감지하여 메모리 모델 재설계

🧵

Thread Count / Peak

조기 탐지 가능

설명

현재 Thread 수 및 최대 Thread 수

문제 조기 탐지

Thread 증가 추이 → Thread leak 조짐 탐지

왜 탐지해야 하는가

Thread수가 계속 증가하면 OS 수준의 한계에 도달 → thread leak을 조기에 발견해야

📦

Metaspace Used

조기 탐지 가능

설명

클래스 로딩 공간 사용량 (MaxMetaspaceSize 대비)

문제 조기 탐지

클래스 로딩 공간 → MaxMetaspaceSize 부족 파악. 동적 클래스 로딩 반복 탐지

왜 탐지해야 하는가

metaspace는 클래스 메타정보 저장소인데 metaspace 가득 차면 OOM: Metaspace가 발생하고 앱이 죽음 → 미리 사용량 감지하면 MaxMetaspaceSize 조정 가능

📚

Class Loading Count

조기 탐지 가능

설명

동적으로 로드된 클래스 수

문제 조기 탐지

동적 클래스 로드 수 → 메모리 부하 유발 코드 탐지

왜 탐지해야 하는가

클래스가 지속적으로 로드되면 Metaspace 사용량이 증가하고, 결국 OOM: Metaspace로 이어질 수 있다

Uptime / CPU Usage

조기 탐지 가능

설명

Task별 가동 시간 및 CPU 사용률

문제 조기 탐지

Task별 성능 지표 → 리소스 병목 인지. CPU 스파이크는 GC나 무한 루프의 징후

왜 탐지해야 하는가

CPU 버스트 발생(GC, 반복 루프), 앱 성능 점점 저하, Task별 리소스 과소 할당

Early Detection

문제 조기 탐지

위 JVM 메트릭을 실시간으로 수집하면, 다음과 같은 문제를 장애 발생 전에 조기 탐지할 수 있다.

🔴

OOM (OutOfMemoryError) 예방

Heap Memory Used가 Max에 근접하거나 Metaspace 사용량이 급증하면 OOM 발생 전에 경고를 받을 수 있다. GC 튜닝, Scale Up, MaxMetaspaceSize 조정 등의 대응이 가능하다.

🟡

GC 성능 저하 감지

GC Count/Time의 증가 추이를 모니터링하면 Full GC 반복으로 인한 Stop-the-World 현상을 조기에 감지할 수 있다. 메모리 모델 재설계나 GC 알고리즘 변경으로 대응한다.

🟣

Thread Leak 조기 발견

Thread Count가 지속적으로 증가하는 패턴을 감지하면 Thread Leak을 조기에 발견할 수 있다. OS 수준의 Thread 한계에 도달하기 전에 원인 코드를 수정할 수 있다.

🔵

리소스 병목 인지

CPU Usage 스파이크는 GC 과부하나 무한 루프의 징후일 수 있다. Uptime과 함께 분석하면 Task별 리소스 과소 할당 여부를 판단하고 적절한 리소스를 배분할 수 있다.

💡

핵심 요약

CloudWatch의 인프라 레벨 메트릭(CPU, Memory)만으로는 JVM 내부 상태를 파악할 수 없다. Prometheus를 통해 JVM 메트릭을 실시간으로 수집하면, OOM, GC 성능 저하, Thread Leak, 리소스 병목 등의 문제를 장애 발생 전에 조기 탐지하고 선제적으로 대응할 수 있다.

도입 배경ecs-discovery