티스토리 뷰

스프링 프로젝트나 서버 관리를 하다 보면 여러 에러를 겪게 되는데 그중 OutOfMemoryError가 자주 발생합니다. 자바 메모리 에러 중 heap space 오류가 발생하는 원인과 heap space 문제 해결 방법을 정리하겠습니다.

 

 

java.lang.OutOfMemoryError: Java heap space 에러 원인

 

OutOfMemoryError의 에러들은 다음에 나오는 문구의 메모리 공간이 부족해서 생기는 문제입니다. 따라서 heap 영역의 공간이 부족해서 해당 오류가 발생하는 것입니다.

 

힙은 서버를 구동할 때 앞으로 있을 메모리를 미리 할당하게 되는데, 만약 순간적으로 힙의 총용량보다 넘치게 된다면 해당 에러가 발생할 수 있습니다. 따라서 문제를 해결하기 위해 서버의 메모리 용량, 그리고 톰캣의 메모리 설정도 수정해주어야 합니다.

 

 

 

java.lang.OutOfMemoryError: Java heap space 에러 해결 방법

 

톰캣 PID 확인 방법 예시

 

1. ps -ef | grep tomcat

톰캣의 메모리 값을 확인합니다. 위의 명령어를 통해 톰캣이 현재 사용하고 있는 PID 값을 확인할 수 있습니다. 위의 사진에선 2305인 것을 알 수 있습니다.

 

2. jmap -heap [#PID]

heap 메모리를 확인합니다. [#PID]에는 1번에서 확인한 PID 값을 입력합니다. 위의 예시에선 2305를 입력하면 됩니다. heap 용량을 영역별로 확인할 수 있지만 만약 메모리 구조에 지식이 부족하다면 넘어가도 무방합니다.

 

3. vi catalina.sh

본인 톰캣 설치경로의 /bin 디렉터리에 있는 catalina.sh를 편집합니다. 혹은 catalina.bat 파일로 되어있을 수 있습니다.

 

4. set JAVA_OPTS=-server -Xms1024M -Xmx2048M -XX:PerSize=512M -XX:MaxPermSize=1024M

자신의 PC 사양에 맞게 JAVA_OPTS 부분을 수정합니다. "Xms"는 최소 힙 영역 크기, "Xmx"는 최대 힙 영역 크기, "XX:PermSize:"는 최소 perm 메모리, "XX:MaxPermSize:"는 최대 perm 메모리를 의미합니다.

 

5. 톰캣을 재시작하고 2번 heap 메모리를 확인해보면 변경된 것을 알 수 있습니다.

 

댓글
반응형