Skip to content
조회 수 179 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
[Tomcat JVM heap memory set]
 
]# /etc/profile
export CATALINA_OPTS="-server -Xms256M -Xmx384M"
 
// 정말로 이옵션이 꼭 필요하지 않는이상 적용하지 말아야 합니다.
이 옵션은 힙사이즈를 늘려주는대신 GC 시간을 잡아먹기때문에

사용자수가 유독 많은 웹사이트의 경우 절대 추천하지 않습니다.


========================================================================

톰캣에 무거운 웹 어플리케이션을 돌리면서 오토 리로드 기능을 사용하다 보면 

2~3번은 정상적으로 되지만 그 이후부턴 PermGen space 라는 에러문구와 함께 톰캣이 뻗어버리는 현상이 발생한다.

그것을 예방하기 위해서는 톰캣폴더 하위에 있는 bin 폴더 밑에 catalina.sh 최상단에 아래 문구를 추가해주면 된다. 
 

# /usr/local/tomcat/bin
# vi ./catalina.sh

 
------------------------------------------------

JAVA_OPTS="-Djava.awt.headless=true -server -Xms512m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC"
 
------------------------------------------------


  출처 - http://msgzoro.egloos.com/3264728

=
=======================================================================

Solr 1.4 Enterprise Search Server 에서는 solr 실행시 JVM의 memory 설정을 변경하기 위해서 다음과 같이 한다.
   "java -Xms512M -Xmx1024M -server -jar start.jar"

하지만 sevlet container로 Tomcat을 사용하는 경우
solr의 실행을 위와 같이 하지 않고, solr.war를 webapp에 넣은후 Tomcat을 start하면 자동으로 solr가 실행된다.
따라서 JVM의 설정의 위와같이 변경할 수 없다.
이런 경우에는 다음과 같이 변경하면 된다.

[방법1]
   1. $CATALINA_HOME/bin/catalina.bat 파일을 오픈한다.
   2. JAVA_OPTS를 찾는다.
   3. -Xms512m -Xmx1024m을 추가한다.

예를 들면, 다음과 같다.

set JAVA_OPTS=%JAVA_OPTS% -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties" 
-Xms512M -Xmx1024M


[방법2]
Tomcat을 시작하기 전에 CATALINA_OPTS 환경변수를 수정하는 것이다.
Unix의 경우에는 startup.sh scrip에 다음을 추가하면 된다.
export CATALINA_OPTS=-Xms512m -Xmx1024m;

* startup.sh은 catalina.sh를 호출한다.

[Reference]
http://www.coderanch.com/t/421341/Tomcat/change-JVM-setting-Xms-Xmx
http://www.informix-zone.com/node/46

 
 
 
 

Tomcat heap 사이즈 조절 및 메모리 튜닝

 

* Sun Microsystyems의 자바 HotSpot VM은 힙을 세 개의 영역으로 나누고 있다. 

 힙의 세 영역은 다음과 같다: 
 1) Permanent space: JVM 클래스와 메소드 개체를 위해 쓰인다. 
 2) Old object space: 만들어진지 좀 된 개체들을 위해 쓰인다. 
 3) New(young) object space: 새로 생성된 개체들을 위해 쓰인다.

 

<Heap layout 할당에 영향을 주는 스위치들 >


 

 *명령행 스위치 설명 
 

-Xms=[n]  최소 heap size 
 

-Xmx=[n]  최대 heap size 
 

-XX:PermSize=[n]  최소 perm size 
 

( JVM에서 OutOfMemoryError: PermGen space 에러가 자주 발생할 때
Heap 메모리가 부족하여 발생하는 줄 알고 -Xmx 옵션으로 늘려도 똑같이 발생.
원인은 PermSize 옵션 때문 .
PermSize는 JVM에서 사용하는 메타데이터에 대한 정보(즉 영구적으로 사용하는)에 대한 저장공간이다. 대표적인 예가 리플렉션에서 사용하는 클래스에 대한 정보들이다.
최근에 와서야 이런 오류가 자주 발생하는 이유는 Spring 프레임워크를 사용하기 때문이다. Spring 프레임워크에서는 AOP, DI 들을 지원하기 위해 많은 리플렉션 기능을 사용하고 Proxy를 이용하여 runtime에 클래스를 만들어 사용한다. 따라서 기존 방식에 비해 많은 메타데이터 저장공간이 필요하게 되었던 것이다.  )

 

 

 

-XX:MaxPermSize=[n]  최대 perm size 
 

-XX:NewSize=[n]  최소 new size 
 

-XX:MaxNewSize=[n]  최대 new size 
 

-XX:SurvivorRatio=[n]  New/survivor 영역 비율  
 

-XX:newratio=[n]  Old/new 영역 비율. HotSpot 클라이언트 VM은 8, HotSpot 서버 VM은 2. 
 

-XX:TargetSurvivorRatio=[n]  GC동안 비울 생존자 수용 가능량 퍼센티지 (capacity percentage.) 초기값은 50%

 

 

-XX:+HeapDumpOnOutOfMemoryError HeapDumpOnOutOfMemory 명령줄 옵션을 사용하면 Out Of Memory 오류 상태가 되었을 때 JVM이 Java 힙의 스냅샷을 덤프하게 됩니다. HeapDumpOnOutOfMemoryError 기능은 SDK 1.4.2.11 및 JDK 1.5.0.04와 함께 사용할 수 있습니다.

 

 

 

* New Generation 메모리 할당 공식 
   Eden = NewSize - ((NewSize/(SurvivorRatio + 2)) * 2) 
   From space = (NewSize - Eden)/2 
   To space = (NewSize - Eden)/2 
 

* Old Generation 메모리 할당 공식 
   Old = Xmx - MaxNewSize

 

* GC한 상태의 Heap메모리 정보출력 
jdk1.4에서 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC 

 

* 정적페이지가 많을 때 
-Xms418m -Xmx418m  
-XX:PermSize=1024m  
-XX:MaxPermSize=1024m  
-XX:NewSize=290m  
-XX:MaxNewSize=290m  
-XX:SurvivorRatio=3 

 

* 동적인 페이지가 많을 때 
-Xms1024m -Xmx1024m  
-XX:PermSize=128m  
-XX:MaxPermSize=128m  
-XX:NewSize=800m  
-XX:MaxNewSize=800m  
-XX:SurvivorRatio=4 

-Xms384m -Xmx384m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewSize=128m -XX:MaxNewSize=128m -XX:SurvivorRatio=3 

set CATALINA_OPTS=-Xms384m -Xmx384m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewSize=128m -XX:MaxNewSize=128m -XX:SurvivorRatio=3 
 

 

Xms: 최초 JVM 이 로드될 때 부여할 메모리
4 Xmx: 최대 JVM 이 가질 수 있는 메모리
5 MaxPermSize: JVM 내의 클래스 정보가 담길 최대 메모리

 

JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/tomcat/jvm_dump -Xms2048m -Xmx2048m -XX:PermSize=1024m -  XX:MaxPermSize=1024m"

 

 

========================================================================

export CATALINA_OPTS="-Djava.awt.headless=true -Xms512m -Xmx512m"

 

관련 URL : http://gnujava.com:8000/board/article_view.jsp?article_no=867&idx_notice=NOTICE_FLAG+DESC%2C&board_no=6

 

->윈도우/리눅스 heap size 설정

 

출처 : http://crowz.co.kr/250

TAG •
?

List of Articles
번호 제목 글쓴이 날짜 조회 수
» Tomcat JVM heap memory set 및 size JAESOO 2016.03.22 179
6 Java 실행 옵션 정리 JAESOO 2016.03.22 143
5 메모리 영역 (code, data, stack, heap) JAESOO 2016.03.22 188
4 [JAVA] 개발환경설정 - 표준프레임워크 JAESOO 2016.01.01 144
3 Tomcat 7.x 와 8.x 간의 default configuration 차이 JAESOO 2016.01.01 457
2 [전자정부 표준프레임워크] 톰캣(Tomcat) 설치하기 JAESOO 2016.01.01 86
1 리눅스 webalizer를 통한 apache log(웹서버 접속 통계) 분석하기 (추천) JAESOO 2014.12.24 387
Board Pagination Prev 1 Next
/ 1

PageViews   Today : 592   Yesterday : 1,144   Total : 19,608,668  /  Counter Status   Today : 178   Yesterday : 409   Total : 1,362,535
Site Info   Member : 180  /  Total documents : 1,221   New documents : 0  /  Total comments : 24

Edited by JAESOO

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소