ITGeine
GC Overhead limit exceeded 본문
문제 상황
gc overhead limit exceeded 발생하여 서비스 다운됨
- The GC Overhead Limit Exceeded error is one from the family of java.lang.OutOfMemoryError and is an indication of a resource (memory) exhaustion.
원인
- the error occurs when the JVM spent too much time performing Garbage Collection and was only able to reclaim very little heap space.
가비지 컬렉터 실행과정에서 자바 프로그램이 느려지는 경우 발생한다. 가바지 수집 후, 자바 프로세스가 자바 컬렉션을 수행하는데 걸리는 시간의 약 98% 이상을 소비하고 힙의 2% 미만이 복구된 상태에서 지금까지 수행하는 과정에서 가비지 컬렉션 중 java.lang.OutOfMemoryError가 5번 이상 생성되는 경우 발생한다. 이 예외는 일반적으로 데이터를 할당하는 데 필요한 공간이 힙에 없는 경우 발생한다.
-> GC가 98% 이상을 사용할 때 발생, 메모리 누수가 원인
해결방안
1. JVM 설정 변경 - heap 사이즈 증설
-- 애플리케이션 코드에 메모리 누수가 있을 경우 근본적인 해결이 되지 않음
2. GC Log dump 로 메모리 누수 구간 분석 및 수정
- MAT (Eclipse Memory Analyzer Tool) 을 사용하여 도움을 받을 수 있음
3. 성능테스트 or 부하가 들어오는 존 배포를 통한 해결 여부 확인
참고
woowabros.github.io/tools/2019/05/24/jvm_memory_leak.html
www.baeldung.com/java-gc-overhead-limit-exceeded
jupiny.com/2019/07/15/java-heap-dump-analysis/