Eclipse OutOfMemory 대처법
Tomcat - OutOfMemory
Description
Eclipse 를 이용한 Java 개발시 Tomcat 구동 중 java.lang.OutOfMemoryError: PermGen space 오류 발생시 대처법
원인
Java VM 이 관리하는 메모리 영역이 몇군데 있는데, 그 중에서 PermGen(Permanent Generation) 영역은 ClassLoader 가 로딩하는 Class 정보를 저장한다.
개발이 진행될수록 Class 는 많아지고, 사용되는 Class 가 많아지면 PermGen 영역이 Full 이 차면서 해당 오류가 발생한다.
PermGen 영역의 특징은 (JVM 의 특징이기도 한데) 일반적으로 늘어나기만 하고, 줄어들지는 않는다.
즉, GC 의 대상이 아니다. 한 번 ClassLoader 에 의해 로딩된 Class 정보는 GC 되지 않는다.
해결
PermGen 영역의 메모리 최대량을 늘려주면 된다.
1. Eclipse.ini
먼저 Eclipse 초기 구동 설정파일인 eclipse.ini 파일에 메모리 설정이 들어가 있다.
아마도 개발환경 배포시 그대로 라면 아래와 같을 것이다.
-XX:PermSize=64M -XX:MaxPermSize=256M -Xms128m -Xmx512m
위 설정에서 -XX:PermSize 와 -XX:MaxPermSize 를 조절하자.
-XX:PermSize 는 초기 설정이며, -XX:MaxPermSize 는 최대치 이다.
아래 -Xms128m 와 -Xmx512m 은 동적 메모리 영역(Heap Space) 의 메모리를 늘리고자 할때 사용한다.
이 설정은 Tomcat OutOfMemory 에러와는 별 상관이 없다.
Visual VM
jdk 설치 시 포함된 Visual VM 툴을 이용하여 VM 정보를 확인해 보자.
Eclipse 의 변경된 설정 정보를 확인 할 수 있다.
이 외에도 Visual VM 을 이용하여 현재 구동중인 JVM 의 많은 정보를 얻을 수 있는데….
2. Tomcat VM arguments
Tomcat 구동시 또는 Tomcat 이 Context Reloading 시에 OutOfMemory 를 만났다면 Tomcat 을 돌려주는 JVM 의 설정을 바꾸어 주어야 한다.
OutOfMemory
먼저, Default 설정으로 구동 시 어떤 상황인지를 모니터링해 보자.
Tomcat 에 프로젝트 3개를 올려서 실행시킨 결과이다.
![]() |
![]() |
위에서 보듯 PermGen 영역이 64 메가 정도까지 증가하다 멈췄다.
사실 죽은거다.-_-
Solution
이제 설정을 바꿔보자.
-
Server View 의 Tomcat Server 를 더블 클릭
-
Open launch configuration 클릭
-
Arguments 탭 이동
-
VM arguments 에 -XX:PermSize=64M -XX:MaxPermSize=128M 를 맨 뒤에 추가한다.
-XX:PermSize=64M -XX:MaxPermSize=128M 에서 실제 얼마를 적용할지는 적절히 알아서 조절하면 된다.
저장 후 Tomcat 을 재구동 시킨다.
아래와 같이 증가된 PermGen 영역으로 정상적으로 Tomcat 이 구동됨을 확인했다.