728x90
실행중이던 서버가 갑자기 다운이 되었다. 로그를 살펴보니 처음보는 에러였다.
서버를 다시 재실행하니 문제없이 잘 작동하기는 했지만 해당 에러에 대해 가볍게 정리를 해보고 이후에 제대로 된 해결 방법에 대해 공부해보려고 한다.
java.lang.OutOfMemoryError: GC overhead limit exceeded
원인
JVM에서 애플리케이션이 가비지 콜렉션을 수행하는데 너무 많은 시간을 소비해서 애플리케이션을 실행할 수 없게 되는 상황에 발생하는 에러이다. 일반적으로 두 가지 상황에서 발생할 수 있다고 한다.
일반적으로 Map이나 ArrayList와 같은 자료구조를 사용할 때 많은 데이터를 자료구조에 저장할 때 메모리 사용량이 높아져서 발생할 수 있다고 한다. 나의 경우에도 회원 정보 목록 조회하는 도중에 해당 에러가 발생했었다.
너무 많은 시간을 GC에 소비했을 경우
GC가 더 이상 사용되지 않는 객체를 제거해주는 작업을 해줘서 메모리 사용을 최적화하는 데 도움을 준다.
하지만 GC가 너무 많으 시간을 소비하면 실제 작업보다 많은 CPU 시간을 사용하게 되어서 프로그램 실행이 느려지거나 중단될 수 있다.
메모리 부족
GC를 수행하던 중에도 메모리 부족 상태가 계속되면, GC는 계속해서 실행되어도 메모리 상태가 개선되지 않을 수 있다.
이렇게 되면 결국 메모리 부족 상태로 더 이상 작업을 수행할 수 없게 되어 오류가 발생할 수 있다.
728x90