티스토리 뷰

공부/Java, JSP

JVM 메모리 설정

doublemetal 2014. 4. 21. 21:28

.


$TOMCAT_HOME/bin/catalina.sh 에서 CATALINA_OPTS를 수정

.


1. OOM(OutOfMemory) 처리(힙덤프 생성 및 톰캣 핸들링)

-XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./java_pid<pid>.hprof

-XX:OnOutOfMemoryError=$CATALINA_HOME/bin/restart.sh    (혹은 stop.sh)

.


2. GC Thread 옵션

- GC에 대한 Thread 수를 정해야 하는데,  Thread수는 전체 CPU Core수 보다 적어야 하고, 2~4개 정도가 적당하다.

-XX:ParallelGCThreads=2 -XX:-UseConcMarkSweepGC

.


3. GC 로그 옵션

GC 로그는 되도록 자세하게 추출할 필요가 있다. GC로그를 상세하게 걸어도 성능 저하는 거의 없다.

-XX:-PrintGC -XX:-PrintGCDetails -XX:-PrintGCTimeStamps -XX:-TraceClassUnloading -XX:-TraceClassLoading

 

마지막에 적용된 TraceClassLoading은 클래스가 로딩되는 순간에 로그를 남겨준다. 일반적으로는 사용하지 않아도 되나, OutOfMemory 에러 발생시 Object가 아니라 class에서 발생하는 경우는 Heap dump로는 분석이 불가능 하기 때문에, Out Of Memory 에러시 같이 사용하면 좋다.

 

출처 http://bcho.tistory.com/788

자바 애플리케이션 성능 튜닝

Java HotSpot VM Options



<restart.sh>

#!/bin/bash

#

# tomcat     This shell script takes care of starting and stopping Tomcat

#

# chkconfig: - 80 20

#

### BEGIN INIT INFO

# Provides: tomcat

# Required-Start: $network $syslog

# Required-Stop: $network $syslog

# Default-Start:

# Default-Stop:

# Short-Description: start and stop tomcat

### END INIT INFO


TOMCAT_USER=irteam

TOMCAT_HOME="/home1/irteam/apps/tomcat"

SHUTDOWN_WAIT=45


tomcat_pid() {

    echo `ps aux | grep org.apache.catalina.startup.Bootstrap | grep -v grep | awk '{ print $2 }'`

}


start() {

    pid=$(tomcat_pid)

    if [ -n "$pid" ]

    then

        echo "Tomcat is already running (pid: $pid)"

    else

        # Start tomcat

        echo "Starting tomcat"

        cd $TOMCAT_HOME/bin && $TOMCAT_HOME/bin/startup.sh

    fi

    return 0

}


stop() {

    pid=$(tomcat_pid)

    if [ -n "$pid" ]

    then

        echo "Stoping Tomcat"

        cd $TOMCAT_HOME/bin && $TOMCAT_HOME/bin/shutdown.sh


    let kwait=$SHUTDOWN_WAIT

    count=0

    count_by=5

    until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]

    do

        echo "Waiting for processes to exit. Timeout before we kill the pid: ${count}/${kwait}"

        sleep $count_by

        let count=$count+$count_by;

    done


    if [ $count -gt $kwait ]; then

        echo "Killing processes which didn't stop after $SHUTDOWN_WAIT seconds"

        kill -9 $pid

    fi

    else

        echo "Tomcat is not running"

    fi


    return 0

}


stop

start

  

exit 0


.

.

.


댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함