개발/오류
[ERROR] Caused by: java.lang.OutOfMemoryError: Java heap space
Hide
2025. 7. 31. 22:29
JAVA의 heap 메모리 부족 문제 발생
힙 메모리에 객체 저장 시 메모리 부족하여 발생하는 에러로 JVM이 더이상 객체를 할당할 수 없어 OutOfMemoryError를 던져 발생.
주요 원인은 아래와 같다고 한다.
1. 처리해야할 데이터의 양이 많을때 (대용량, 컬렉션 대용량 List,Map 등)
2. 메모리 누수, 객체 참조 유지로 가비지 컬렉션 처리 불가
3. JVM 힙 메모리 설정값이 적을때
-XX:+HeapDumpOnOutOfMemoryError JVM 옵션을 설정하면 에러 발생 시 힙 덤프를 남겨 문제 분석이 가능하다 하는데 나는 이슈 재발이 안되어 로그만 보고 원인을 분석해야 하는 상황이었고
대충 로그 보고 어디:쯤에서 끊겼는지 확인해보니
특정 기능 데이터 조회가 안되는듯함
한 테이블 전체 조회 SELECT * FROM TESTTABLE 이었는데
DB 데이터 확인해보니 데이터 수량으로 객체 메모리 확인 시 DB 데이터 양이 대략 6G정도
JVM 힙 메모리 설정은 4GB로 적재할 수 없는 상황
불필요한 객체를 생성하지 않도록 전체 테이블을 조회하는 것이 아닌 키 값을 사용하여 조회 대상으로만 단건 조회하도록 변경 (이러면 DB 연결을 많이 하긴 함)
대용량 데이터를 한번에 List 에 담으려다가 발생하여 데이터를 나눠 처리하도록 개선 후 문제없이 동작을 확인