Java Heap space와 PermGen spac
Java는 메모리 영역을 두 부분으로 구분하여 사용한다.
1. 일반적인 처리에 사용하는 Java Heap space
2. Class와 같은 Permenant Generation 대상 데이터를 두기 위한 PermGen space
Java Heap space
큰 해상도의 이미지 resize시 Java Heap space 부족 현상이 나타났다. 동일한 소스, 동일한 자바, 톰캣 버전일때 톰캣으로 서버를 따로 잡은 경우는 문제가 없었지만, 이클립스 상의 동일버전 톰캣 개발환경에서는 고해상도 이미지 resize시 Java Heap space 부족 현상이 있었다.java.lang.OutOfMemoryError: Java heap space
위 에러가 발생한다면 -Xmx(Java heap space)를 늘려주고 PermSize도 체크 해봐야 하는지 테스트 해봐야겠다.
현재 사중 중인 이클립스 환경에서는 1200까지 설정 가능했고 1300 부터는 이클립스 구동이 되지 않았다.
-Xmx는 32 비트 JRE에서 1200-1300m 정도가 가능하다고 하고, 64 비트 JRE에는 이론적인 제한이 없다고 한다.
PermGen space
일반적인 경우 기본 PermGen Size로 충분한 모양이다. 어딘가에서 256M까지면 충분하다고 한 내용을 본 기억이 있다. 그다지 크게 설정할 부분은 아닌가보다.여러 컨텍스트를 잡아서 사용할 경우나 이클립스 사용시 클래스가 많아져서 모자랄 경우가 있는 듯 하다. 클래스 변경시 리로딩 하면서 PermGen 오류가 자주 발생하곤 한다.
PermGen space는 -XX:PermSize, -XX:MaxPermSize 옵션으로 설정할 수 있다.
톰캣 구동시 메모리 설정
톰캣에 메모리 부분을 아래의 값으로 적용해서 현재 잘 사용하고 있다.Java Heap space (Xms, Xmx) : 512M ~ 1024M
PermGen space (PermSize, MaxPermSize) : 64M ~ 256M
위 값을 catalina.bat에 아래처럼 설정했다.
set "CATALINA_OPTS=-Xms512M -Xmx1024M -XX:PermSize=64M -XX:MaxPermSize=256M"