톰캣 운영시, JVM 옵션과 같은 추가 설정을 좀 더 깔끔하게 관리할 수 있는 방법에 대해 정리한다.

 

문제점

- 대부분의 시스템들은 JVM 관련 옵션을 catalina.sh 파일을 수정하여 사용함.

- 이렇게 catalina.sh 파일을 수정을 하게될 경우 유지보수에 많은 어려움이 있다.

톰캣 버전 업그레이드나, 서버이전 등과 같은 작업이 발생할 경우 설정된 옵션을 옮기기 위해서 주의하여 값을 추출하여야 한다.

- 또한, catalina.sh을 지속적으로 수정하게 된다면 톰캣의 메일 sheell을 잘못 건드릴 수 있는 위험성이 존재한다.

 

[현재 catalina.sh 예시] 

# -----------------------------------------------------------------------------

# OS specific support.  $var _must_ be set to either true or false.


CATALINA_OPTS="-server -Xmx2g -Xms2g -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+UseParallelOldGC -Dfile.encoding=UTF-8" 

CATALINA_OPTS="$CATALINA_OPTS -verbosegc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails"

 

cygwin=false
os400=false
darwin=false
case "`uname`" in
CYGWIN*) cygwin=true;;
OS400*) os400=true;;
Darwin*) darwin=true;;
esac 

... 

 

해결방법

- 톰캣에는 이러한 옵션값을 추가할 수 있는 또 다른 방법을 제공한다.  바로 bin 하위에 setenv.sh 파일을 사용하는 방법이다.

- 해당 파일은 기본적으로 존재하지 않으며, 직접 쉘 파일을 생성해줘야 한다.

  

[/bin/setenv.sh 파일 생성]

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

CATALINA_OPTS="-server -Xmx2g -Xms2g -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+UseParallelOldGC -Dfile.encoding=UTF-8" 

CATALINA_OPTS="$CATALINA_OPTS -verbosegc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails"

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


setenv.sh이 있을 경우 catalina.sh에서 다음과 같이 setenv.sh 파일을 로드하게 된다.

 

if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
  . "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
  . "$CATALINA_HOME/bin/setenv.sh"
fi 

 

마치며

- setenv.sh로 옵션 정보를 옮기게 된다면 위에서 언급한 것처럼 톰캣 업그레이드나 서버이전 등과 같은 작업이 있을 경우 좀 더 편리한 장점이 있다.

(setenv.sh과 server.xml 파일만 옮기면 톰캣에 관한 설정은 끝날 듯)

- 또한, 옵션을 처리하는 영역이 명확히 분리되기에, 옵션을 추가하는 등 유지보수 측면에서도 좋은 역할을 할 것이라 생각한다.



Posted by SungHoon, Park
,