티스토리 뷰

java.lang.OutOfMemoryError: Java heap space

Apache Tomcat에서 실행 중인 웹 애플리케이션에서 java.lang.OutOfMemoryError: Java heap space 오류가 발생하는 경우 어떻게 조치해야 할까? 절차를 아래와 같이 정리해봤다.

  • 먼저 Heap이란 용어를 이해해야 한다. Heap이란 Java Application이 실행 중에 생성되는 Object가 저장되는 메모리 영역이다.(당연히 Garbage Collection이 발생하는 영역이기도 하다.) Heap Size는 바로 이러한 Heap의 크기를 의미하며 당연히 Heap Size가 클수록 좋다. Heap Size가 작으면 java.lang.OutOfMemoryError: Java heap space 오류가 발생할 확률이 높아진다. 물론 Heap 사용량을 유발하는 코드 상의 구조적인 결함이 있는지도 점검해봐야 한다. 구조적인 결함을 놔둔채 Heap Size만 늘리면 애플리케이션의 시한부 생명을 조금이나마 더 늘리는 것에 불과하다.
  • Heap Size를 늘리기 위해 실행 중인 Apache Tomcat 서비스를 중지하고 운영체제 별로 아래 명령을 실행하고 서비스를 재시작한다.
// Linux 기반의 Bash 쉘일 경우
export CATALINA_OPTS="-Xms1024m -Xmx1024m"

// Windows 기반일 경우
set CATALINA_OPTS=-Xms1024m -XmX1024m
  • 위의 옵션이 바로 Heap Size를 결정하는 옵션으로 -Xms는 최소 Heap Size, -Xmx는 최대 Heap Size를 의미한다. 1024m은 1024MB를 의미한다. 1g를 입력해도 의미는 동일하다. 시스템의 메모리는 물리적으로 한정된 공간이므로 Heap Size를 무조건 높게 잡을 수는 없다. 최대값은 사용 가능한 시스템 메모리의 75% 정도를 할당하자. 최소값과 최대값 모두 같은 값을 할당하는 것도 좋은 방법이다.

참고 글

TAG
,
댓글
댓글쓰기 폼