관리 메뉴

ITGeine

GC Overhead limit exceeded 본문

Study/Java

GC Overhead limit exceeded

Nick9 2020. 9. 24. 14:52

문제 상황

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

 

도움이 될수도 있는 JVM memory leak 이야기 - 우아한형제들 기술 블로그

도움이 될지도 모르는 JVM memory leak 얘기인데 제목을 뭐라고 하지? 안녕하세요. 배민 플랫폼실 주문중계 시스템팀 오민철입니다.이 글은 몇 줄의 코드와 어디서 걸렸는지 모를 dependency library로 발

woowabros.github.io

www.baeldung.com/java-gc-overhead-limit-exceeded

 

java.lang.OutOfMemoryError: GC Overhead Limit Exceeded | Baeldung

Learn about the OOM - GC Overhead Limit Exceeded, its causes and ways to solve it.

www.baeldung.com

jupiny.com/2019/07/15/java-heap-dump-analysis/

 

Java Heap Dump 분석하기

Spring으로 개발한 웹어플리케이션을 운영하다보면, 많은 트래픽으로 인해 또는 구현상의 버그로 인해(보통은 이 경우겠지만) Heap의 사용량이 순간적으로 증가할 수 있다. 이 경우 GC(Garbage Collectio

jupiny.com