'catalina.sh/bat'에 해당되는 글 3

  1. 2010.08.27 Tomcat 표준출력을 파일로 남기기
  2. 2009.05.19 Tomcat 구동 쉘/배치파일 분석
  3. 2009.05.19 Tomcat 에 Heap 메모리 할당하기

Tomcat 표준출력을 파일로 남기기

고객사에 모듈 업그레이드를 했는데 에러가 난다.
로그를 확인해야 하는데 로그가 없다.
클래스 로딩되는 상황을 확인해야 하는데 표준출력이 어디로 가는건지...

콘솔에서 starup.bat 를 실행시키거나 startup.bat 를 더블클릭해서 Tomcat을 시작하는 경우 표준출력이 콘솔에 출력되어서 지나간 로그를 확인하기가 힘들다.
(Tomcat 버전에 관계없이 당연한 현상임)


Tomcat이 새창으로 구동되어서 표준출력을 파일로 리다이렉션을 시켜도 파일이 제대로 남지 않는다.
로그가 많아서 필요한 로그는 새창에서 지나가 버림.
startup.bat, catalina.bat 를 이것저것 수정해도 안됨.

로그를 남기려면 새창을 띄우면 안됨.
새창을 띄우는 부분을 찾아서 수정하면 될거 같다.


또는
rem Execute Java with the applicable properties
if not "%JPDA%" == "" goto doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% > c:/tomcat.log
goto end

이렇게 하면 표준출력이 파일로 떨어진다.
(서비스로 구동시키면 stdout.log, stderr.log 가 생길거야.)

- 회고
운영되는 서버를 왜 이렇게 구동시키지? 우....띠
예전에 이런 문제가 발생했을때 확실히 분석해서 방법을 알아뒀으면 오늘같은 고생은 안했을건데.

로그보고 에러 잡는 일이 남았다. 이제부터 진짜 일이지.

Tomcat 구동 쉘/배치파일 분석

- HP-UX, Tomcat/5.5.27
catalina.sh
  1. OS 종류를 확인하고 변수 설정
  2. setenv.sh 실행
  3. setclasspath.sh 실행
  4. touch "$CATALINA_BASE"/logs/catalina.out
  5. $JAVA_WRAPPER "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
        -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
        -Dcatalina.base="$CATALINA_BASE" \
        -Dcatalina.home="$CATALINA_HOME" \
        -Djava.io.tmpdir="$CATALINA_TMPDIR" \
        org.apache.catalina.startup.Bootstrap "$@" start \
        >> "$CATALINA_BASE"/logs/catalina.out 2>&1 &

- Windows, Tomcat/4.1.37-LE-jdk1.4
startup.bat
catalina.bat
  1. CATALINA_OPTS 설정
  2. setenv.bat 실행
  3. setclasspath.bat 실행
  4. echo Using CATALINA_BASE:   %CATALINA_BASE%
    echo Using CATALINA_HOME:   %CATALINA_HOME%
    echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR%
    echo Using JAVA_HOME:       %JAVA_HOME%

- Windows, Tomcat/6.0.18
startup.bat
  1. CATALINA_HOME 변수로 %CATALINA_HOME%\bin\catalina.bat를 확인한다.
  2. 현재 디렉토리를 CATALINA_HOME 으로 두고 위와 같이 확인한다.
  3. 그래도 catalina.bat를 찾지 못하면 에러
  4. 전달된 인자를 설정하고
  5. catalina.bat start 를 실행시킨다.
catalina.bat
  1. 위와 같이 CATALINA_HOME 변수 확인
  2. setenv.bat 실행
  3. setclasspath.bat 실행
  4. CLASSPATH 설정
  5. echo Using CATALINA_BASE:   %CATALINA_BASE%
    echo Using CATALINA_HOME:   %CATALINA_HOME%
    echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR%
    echo Using JAVA_HOME:       %JAVA_HOME%




Tomcat 에 Heap 메모리 할당하기

Q사 T시스템 사이트가 열리지 않는 경우가 발생

Tomcat 구동시 Heap 메모리를 증가시켰는데도 Hangup 현상이 계속 발생함.

# ps -efx | grep java //x 옵션을 사용해서 프로세스를 확인
root 10733     1  0  5월 15  ?         2:56 /opt/java1.5/bin/IA64N/java -Dserver.type=real -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -XdoCloseWithReadPending -Djava.endorsed.dirs=/opt/WS/tomcat/common/endorsed -classpath :/opt/WS/tomcat/bin/bootstrap.jar:/opt/WS/tomcat/bin/commons-logging-api.jar -Dcatalina.base=/opt/WS/tomcat -Dcatalina.home=/opt/WS/tomcat -Djava.io.tmpdir=/opt/WS/tomcat/temp org.apache.catalina.startup.Bootstrap start
oracle 12243 12238  0  2월 19  ?        94:04 /oracle/app/oracle/product/10g/db_1/jdk/bin/IA64N/java -server -Xmx256M -XX:MaxPermSize=96m -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -XdoCloseWithReadPending -DORACLE_HOME=/oracle/app/oracle/product/10g/db_1 -Doracle.home=/oracle/app/oracle/product/10g/db_1/oc4j -Doracle.oc4j.localhome=/oracle/app/oracle/product/10g/db_1/HOST/sysman -DEMSTATE=/oracle/app/oracle/product/10g/db_1/HOST -Doracle.j2ee.dont.use.memory.archive=true -Djava.protocol.handler.pkgs=HTTPClient -Doracle.security.jazn.config=/oracle/app/oracle/product/10g/db_1/oc4j/j2ee/OC4J_DBConsole_HOST/config/jazn.xml -Djava.security.policy=/oracle/app/oracle/product/10g/db_1/oc4j/j2ee/OC4J_DBConsole_HOST/config/java2.policy -Djava.security.properties=/oracle/app/oracle/product/10g/db_1/oc4j/j2ee/home/config/jazn.security.props -DEMDROOT=/oracle/app/oracle/product/10g/db_1/HOST -Dsysman.md5password=true -Drepapi.oracle.home=/oracle/app/oracle/product/10g/db_1 -Ddisable.checkForUpdate=true -Djava.awt.headless //이놈은 뭘까?

프로세스를 확인해보니 옵션이 적용되지 않았다.[각주:1]

catalina.sh에 CATALINA_OPTS="$CATALINA_OPTS -server -Xms1024m -Xmx2048m" 을 추가했는데도...

확인해보니 catalina.sh에서 setenv.sh을 호출하는데 거기에서 CATALINA_OPTS="-XdoCloseWithReadPending" 이러고 있다.(Tomcat 구동 쉘/배치파일 분석 참고)
윽...

setenv.sh에 설정옵션을 넣고 재구동시킴.

JAVA_OPTS="-Dserver.type=real" //real 보다는 prod가 낫지 않나?
CATALINA_OPTS="$CATALINA_OPTS -server -Xms512m -Xmx1024m -XX:MaxPermSize=256m"
umask 072 //Tomcat 루트권한으로 구동되므로 생성되는 파일을 다른 사용자도 확인가능하도록 한다.

며칠 지켜봐야 할거 같다.


  1. ps -ef 로만 확인하니깐 그렇다. 사소한 것도 확인하도록~ [본문으로]