
데브옵스
Micrometer 객체 증가로 인한 메모리 이슈 회고
두줄요약
Spring Boot 3.x와 PathVariable 증가로 Micrometer 객체가 누적되며 메모리 이슈가 발생했습니다. 메트릭 수집을 조정하고 ZGC로 전환해 Heap 사용률을 안정화했습니다.
문제 상황
- Spring Boot 3.x로 내부 이관한 뒤 PathVariable 기반 API 호출이 늘며 메모리 사용률이 점진적으로 상승
- GC가 정상 동작해도 Micrometer 관련 Meter$Id, Tag, ImmutableTag 객체가 Old 영역에 누적
원인 분석
- Spring Cloud LoadBalancer의 Micrometer 메트릭 수집이 활성화된 상태에서 URI 정규화가 적용되지 않은 태그 수집
- PathVariable 값이 달라질 때마다 새로운 Meter 객체가 생성되는 구조
- G1GC 전환 후에도 Mixed GC가 Old 영역을 충분히 수거하지 못해 메모리 증가가 지속
해결 방법
- spring.cloud.loadbalancer.stats.micrometer.enabled, openfeign, resilience4j 관련 메트릭 수집 비활성화
- ZGC로 재전환해 백그라운드 수거와 낮은 pause 특성 활용
- 메트릭 설정과 GC 전략을 서비스 특성에 맞게 조정
