ERROR java.lang.OutOfMemoryError: PermGen space (Eclipse, tomcat 사용시 해결방법)

2016. 10. 12. 14:47etc/error

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.OutOfMemoryError: PermGen space

 

 

프로젝트를 빌드하는 중에 Caused by: java.lang.OutOfMemoryError: PermGen space 오류가 났다.

 

 

찾아보니 Permanent Generation 영역의 메모리가 부족해서 나는 오류라고 한다.

 



 

Permanent Generation 이 어떤 녀석인지 간단하게만 살펴보자.

 

 

JVM (java virtual machine) > Runtime Data Area(메모리 영역) > Heap Area > Permanent

 

Class loader 에 의해 load되는 Class, Method 등에 대한 Meta 정보가 저장되는 영역

JVM 에 의하여 사용되며 Reflection 을 사용하여 동적으로 클래스가 로딩되는 경우에 사용

 

 

 

[번역] java.lang.OutOfMemoryError: PermGen space는 왜 발생하나?

위 링크는 어떤 분이 java.lang.OutOfMemoryError: PermGen space 오류에 대한 글을 번역해 놓은 포스팅이다.

(노고에 감사드림)

 

 

특히나 Spring Framework 를 사용하여 프로젝트를 진행할 경우 해당 애러를 한번쯤은 만나게 된다.

작업 중에 나는 오류는 무심코 서버를 재시작하는 것만으로 어느정도는 회피가 가능하다.

 

하지만 나같은 경우는 프로젝트를 빌드하는중에 오류가 난다. 빌드가 안되네...

 

메모리 영역이 부족한 탓인가...

 

필자처럼 빌드 시 프로젝트가 많은 메모리를 필요로 하는 것이 아니라

메모리 누수로 인하여 java.lang.OutOfMemoryError: PermGen space 오류가 발생한다면

메모리를 늘려서 메모리영역이 부족하기까지의 시간을 늦춰준다면 일시적인 조치에 불가하지 않을까?

메모리 누수에 관한 정보를 찾아 근본적인 문제를 해결하기를 추천한다.

 

 



 

java.lang.OutOfMemoryError: PermGen space 해결을 위해서

Eclipse 와 tomcat 의 메모리 영역을 늘려보자.

 

1. Eclipse 가 있는 폴더에서 ini 파일을 수정한다. (아래 2줄 추가 혹은 수정)

-XX:PermSize=64M
-XX:MaxPermSize=128M

 

 

2. Eclipse 에서 Tomcat 의 메모리 영역을 늘려보자.

Eclipse 에서 서버를 더블클릭 > Overview > Open launch configuration 클릭

 

 

 

 

Arguments 탭 > VM arguments 영역에 다음과 같이 추가한다.

 -Xmx1024m -Xms1024m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewSize=128m