톰캣 Tomcat 메모리설정 java.lang.OutOfMemoryError : PermGen space 에러
개발을 한 후 서버에 올려 톰캣을 실행하다 보면 위와 같은 에러를 볼수 있다.
PermGen space 는 Class, Method 등이 저장되는 영역으로 JVM에 의해 사용된다. 즉, OutOfMemory 에러는 설정된 메모리가 부족하여 발생하는 에러이다.
간단히 톰캣의 메모리를 설정해주면 해결된다.
위에 있는 Jconsole 창은 OutOfMemory 에러가 발생했을 때의 상태이다.
heap 메모리가 계속 올라가다가 17:00가 넘어가면서 OutOfMemory 가 발생하고 페이지가 열리지 않기 시작했다.
그래프 아래 Details부분을 보면 최대 메모리가 250메가 정도로 설정되어 있다.(메모리 셋팅을 한적 없음)
참고) Jconsole 실행시 복수의 프로세스가 뜬다면 아래의 Link를 참고 해 pid를 확인한 후 해당 pid로 접속하면 된다.
Link : 톰캣 강제종료 방법, tomcat 재실행하기(pid확인)
이를 해결하기 위해 톰캣의 메모리를 늘려보자.
OS는 window server2012, 톰캣은 7.0(무설치), JDK는 1.7 기준이다.
우선 자바가 설치된 폴더의 bin 폴더로 이동해 Jconsole.exe 파일을 실행한다.
그럼 위와 같은 Monitoring 창이 뜨고 현재 설정된 메모리를 확인할 수 있다.
톰캣의 bin 폴더로 이동하자.
catalina.bat 파일을 편집으로 열어 setlocal 을 지우고
set "CATALINA_OPTS=-Xms512M -Xmx1024M -XX:PermSize=256M -XX:MaxPermSize=512M"
을 추가해준다.
Xms는 최소메모리
Xmx는 최대메모리
XX:PermSize 최소Perm메모리
XX:MaxPermSize는 최대Perm메모리 세팅이다.
위와 같이 설정이 끝났다면
톰캣을 재실행하고 Jconsole을 다시 열어보자.
최대 heap메모리와 최대Perm메모리가 늘어난 것을 확인 할 수있다.
물론 OutOfMemory 에러도 발생하지 않는다.
----추가내용(20170224추가 : 톰켓 튜닝---
1. JVM Heap Memory Size 변경
bin\catalina.sh 파일을 열어 가장 상단에 아래 내용 추가
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024M -Xmx1024M -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512M -XX:MaxPermSize=512M -XX:+DisableExplicitGC"
2. JRE 메모리 누수 처리
conf\server.xml 파일에 아래 코드를 찾아 없으면 추가. 주석이라면 주석 제거
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
3. Thread pool 설정
conf\server.xml 에서 사용할 포트 커넥터에 아래 내용 추가
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" maxThreads="250" maxHttpHeaderSize="8192" emptySessionPath="true"
enableLookups="false" acceptCount="100" disableUploadTimeout="true"/>
추가 내용 참조 : http://newstars.tistory.com/302
'Programing > JAVA' 카테고리의 다른 글
java.lang.ClassNotFoundException 에러 해결방법 (0) | 2016.05.04 |
---|---|
java 자바 substring 문자열 자르기 뒤에서부터 자르기 (2) | 2016.05.03 |
tomcat cmd 명령프롬프트 창에서 실행 로그 확인 톰캣 로그 확인 (0) | 2015.12.11 |
Can not find the tag library descriptor... 에러 해결 방법 taglibs에러 해결법 (0) | 2015.11.26 |
BeanNotOfRequiredTypeException 에러 해결방법 (0) | 2015.11.18 |
댓글