본문 바로가기

Error

java.lang.OutofMemoryError:PermGenSpace

프로젝트 수행 중에 아래와 같은 Error가 발생하였다.

Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: PermGen space

PermGen space라는 메시지는 permanent generation가득 찬 상태라는 것이다. 
permeanent generation은 Class와 Method가 저장되는 힘의 영역이다. 
어플리케이션이 많은 수의 클래스를 로드하면, -XX:MaxPermSize옵션을 사용하여 permanent generation의 크기를 증가시킬 필요가 있다.

Tomcat을 사용하다 이 에러를 보았다면 대체로 웹 어플리케이션을 너무 많이 Update하거나 Reload한 것이 원인이다. Tomcat과 JVM은 웹어플리케이션을 삭제하고 다시 생성할 떄 할당한 모든 메모리를 해제하지 않는다. 톰캣을 여러 번 reload하면 할당된 메모리가 바닥나서 동작하지 않게 된다. 

Tomcat에서 에러 발생 시 해결 방법 : 
1. Tomcat 재시작.
2. Tomcat이 할당할 수 있는 메모리를 늘려준다(이 방법은 에러발생을 중지시키는 것이 아니라 Tomcat을 재시작하기까지의 시간을 연장시킬 뿐이다.)
3. 메모리 누수가 발생하지 않도록 Tomcat을 설정한다.

2. Tomcat이 할당할 수 있는 메모리를 늘려준다 : 
 1) catalina.bat 파일 수정하는 방법

set CATALINA_OPTS=-Xms512m -Xmx1024m
 2) eclipse.ini 수정하는 방법
      -Xms1024m 추가한다.
-Xmx1024m 추가한다.
*각 옵션들 설명
Xverify:non
e 클래스 검사 생략. eclipse 실행 시간 단축
XX:+UseParallelGC Parallel Collector를 사용. 병렬 가비지 컬렉션.
XX:-UseConcMarkSweepGC 병행 mark-sweepGC 기능을 수행하여 GUI 응답 속도 처리
XX:PermSize=32M     eclipse 클래스 로딩 기본 메모리
XX:MaxPermSize=128M     eclipse 클래스 로딩 최대 메모리
Xms256m    eclipse 실행시 잡는 최소 메모리
Xmx256m    eclipse 실행시 잡는 최대 메모리

3. 메모리 누수가 발생하지 않도록 Tomcat을 설정한다.
 web.xml 파일에서 
appServlet 부분에 enablePooling 추가

<servlet>

<servlet-name>appServlet</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>

</init-param>

<init-param>

<param-name>enablePooling</param-name>

<param-value>false</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>appServlet</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

*참고사이트 : 

http://mindasom.tistory.com/entry/Java-javalangOutOfMemoryError-PermGen-space

http://layered.tistory.com/entry/%EB%B2%88%EC%97%AD-javalangOutOfMemoryError-PermGen-space%EB%8A%94-%EC%99%9C-%EB%B0%9C%EC%83%9D%ED%95%98%EB%82%98