Oracle Jdk 7부터는 G1 gc 알고리즘을 디폴트로 사용한다고 했었는데.. 인터넷에 이런 자료가 없어서 직접 테스트 해보니 디폴트는 기존의 generation model을 사용중이다. 따로 옵션을 넣어줘야 한다.
<서버 설치>
$ mkdir -p /home/www/jdk7
$ cd /home/www/jdk7
$ wget http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-i586.tar.gz
$ tar zxvf jdk-7-linux-i586.tar.gz
$ mkdir -p /home/www/tomcat
$ cd /home/www/tomcat
$ wget http://mirror.khlug.org/apache/tomcat/tomcat-7/v7.0.25/bin/apache-tomcat-7.0.25.zip
$ unzip apache-tomcat-7.0.25.zip
$ vi /home/www/.bashrc
$ export JAVA_HOME="/home/www/jdk7/jdk1.7.0"
$ source /home/www/.bashrc
$ cd /home/www/tomcat/apache-tomcat-7.0.25/bin
$ vi catalina.sh
(다음을 # --- 다음에 추가)
CATALINA_OPTS=" -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
* bashrc에 넣어둘 수도 있음
$ ./catalina.sh start
Using CATALINA_BASE: /home/www/tomcat/apache-tomcat-7.0.25
Using CATALINA_HOME: /home/www/tomcat/apache-tomcat-7.0.25
Using CATALINA_TMPDIR: /home/www/tomcat/apache-tomcat-7.0.25/temp
Using JRE_HOME: /home/www/jdk7/jdk1.7.0
Using CLASSPATH: /home/www/tomcat/apache-tomcat-7.0.25/bin/bootstrap.jar:/home/www/tomcat/apache-tomcat-7.0.25/bin/tomcat-juli.jar
$ ps -ef | grep java
www 17189 1 97 11:42 pts/1 00:00:02 /home/www/jdk7/jdk1.7.0/bin/java -Djava.util.logging.config.file=/home/www/tomcat/apache-tomcat-7.0.25/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.endorsed.dirs=/home/www/tomcat/apache-tomcat-7.0.25/endorsed -classpath /home/www/tomcat/apache-tomcat-7.0.25/bin/bootstrap.jar:/home/www/tomcat/apache-tomcat-7.0.25/bin/tomcat-juli.jar -Dcatalina.base=/home/www/tomcat/apache-tomcat-7.0.25 -Dcatalina.home=/home/www/tomcat/apache-tomcat-7.0.25 -Djava.io.tmpdir=/home/www/tomcat/apache-tomcat-7.0.25/temp org.apache.catalina.startup.Bootstrap start
<로컬 환경에 jdk 설치구축>
http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.html
jdk_home에 있는 bin/jconsole.exe 실행
<jconsole 이용>
ip와 포트을 입력해서 접속. 디폴트는 jdk 6와 동일하게 사용. 디폴트가 g1을 적용한 것이라고 했지만 young gen/old gen/perm gen 방식을 그대로 사용하는 ps marksweep, ps scavenge를 그대로 이요
G1 옵션 추가
$ vi catalina.sh(다음을 # --- 다음에 추가)
CATALINA_OPTS=" -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -XX:+UseG1GC "
( -XX:+UnlockExperimentalVMOptions 는 java 1.6 후반부 버전에서 G1 알고리즘을 쓸떄 사용가능하다. jdk7부터는 이 옵션없이 G1을 쓸 수 있다.)
jconsole로 확인하니, G1 Old gen, G1 young gen으로 뜨는지 확인했다.
chart상으로는 여러 영역이 보이지만, G1 자체가 young/old gen이 없기 때문에 이 정보는 나오지 않는다.
'java core' 카테고리의 다른 글
자바의 FileDescriptor 클래스의 native 메소드 내부 찾아보기 (0) | 2012.03.05 |
---|---|
java 7 은 glic 2.4 이상의 linux에서 동작 (0) | 2012.02.16 |
JDK 버그-classloader가 array 타입의 클래스 로딩시 ClassNotFoundException발생 (2012.2.현재) (0) | 2012.02.10 |
Apache Mina 사례에서 본 Selector.select() 이슈- cpu 100% 튀는 현상 (0) | 2012.02.03 |
JDK 1.6.0_22에서 JMX memory leak 이슈 해결 (0) | 2012.02.03 |