LabHub
배우기 러닝패스 코스

Tomcat & nginxの運用

Tomcatを起動し構造を掴む

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

systemd 없이 Tomcat 을 기동·정지하고, 디렉터리 구조와 리슨 포트를 파악하고, setenv.sh 로 JVM 옵션을 주입해 실제로 적용됐는지 프로세스에서 확인할 수 있게 됩니다.

왜 중요한가

SI 현장의 서버는 벤더가 준 tar.gz 를 풀어 쓰는 경우가 흔하고, 컨테이너 환경에는 systemd 가 없습니다. 그래서 catalina.sh 를 직접 다루는 능력이 기본기가 됩니다. 또 하나 — "프로세스는 떠 있는데 포트가 안 열린 상태"가 실제로 존재합니다. 포트 충돌이나 커넥터 초기화 실패 때 그렇습니다. 기동 확인을 프로세스가 아니라 로그와 포트로 하는 습관은 이 실습에서 몸에 붙습니다.

단계

  1. /root/tc 디렉터리를 만들고, java -version 의 출력을 /root/tc/java.txt 에 저장합니다. (표준에러까지 포함해야 합니다.)
  2. /root/tc/layout.csv 를 만듭니다. 첫 줄은 dir,purpose. bin, conf, lib, logs, webapps, work, temp 일곱 행이 있어야 하고 purpose 는 각각 8자 이상이어야 합니다.
  3. /opt/tomcat/bin/catalina.sh start 로 Tomcat 을 기동합니다. http://127.0.0.1:8080/ 이 HTTP 200 을 반환해야 합니다.
  4. /opt/tomcat/logs/catalina.out 에서 기동 소요 시간(밀리초)을 찾아 숫자만 /root/tc/startup.txt 에 저장합니다.
  5. 현재 LISTEN 중인 포트 중 Tomcat 이 연 포트를 한 줄에 하나씩 오름차순으로 /root/tc/ports.txt 에 저장합니다.
  6. /opt/tomcat/webapps/hello/index.html 을 만들고 본문에 LabHub 문자열을 넣습니다. http://127.0.0.1:8080/hello/ 가 200 이고 본문에 LabHub 가 있어야 합니다.
  7. Tomcat 을 정지했다가 다시 기동합니다. (catalina.sh stop 30 -forcecatalina.sh start) 재기동 후에도 http://127.0.0.1:8080/hello/ 가 200 이어야 합니다.
  8. /opt/tomcat/bin/setenv.sh 를 만들고 아래 옵션을 CATALINA_OPTS 로 정의한 뒤 재기동합니다. -Xms256m -Xmx256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/root/tc/dump /root/tc/dump 디렉터리도 미리 만들어 두세요. 실행 중인 자바 프로세스의 인자에 이 옵션들이 실제로 보여야 통과합니다.

참고

JDK 버전 확인

/root/tc 디렉터리를 만들고, java -version 의 출력을 /root/tc/java.txt 에 저장합니다. (표준에러까지 포함해야 합니다.)

java -version 은 출력이 표준에러로 나갑니다. 파일로 저장하려면 리다이렉션에 주의하세요.

디렉터리 역할 정리

/root/tc/layout.csv 를 만듭니다. 첫 줄은 dir,purpose. bin, conf, lib, logs, webapps, work, temp 일곱 행이 있어야 하고 purpose 는 각각 8자 이상이어야 합니다.

각 디렉터리가 무엇을 담는지 한 줄로 적습니다. work 와 temp 의 차이, lib 와 webapps/*/WEB-INF/lib 의 차이를 구분해 보세요.

Tomcat 기동

/opt/tomcat/bin/catalina.sh start 로 Tomcat 을 기동합니다. http://127.0.0.1:8080/ 이 HTTP 200 을 반환해야 합니다.

systemctl 은 이 환경에 없습니다. bin 아래의 기동 스크립트를 직접 실행하세요. 기동은 비동기라 바로 curl 하면 실패할 수 있습니다.

기동 소요 시간 확인

/opt/tomcat/logs/catalina.out 에서 기동 소요 시간(밀리초)을 찾아 숫자만 /root/tc/startup.txt 에 저장합니다.

catalina.out 에 'Server startup in [N] milliseconds' 형태의 줄이 남습니다. 숫자만 뽑아야 하니 grep 뒤에 sed 나 awk 를 붙이세요.

리슨 포트 확인

현재 LISTEN 중인 포트 중 Tomcat 이 연 포트를 한 줄에 하나씩 오름차순으로 /root/tc/ports.txt 에 저장합니다.

ss -ltn 으로 현재 LISTEN 상태인 포트를 봅니다. 서비스 포트 말고 하나가 더 열려 있을 텐데, 그것이 무엇인지가 이 단계의 핵심입니다.

정적 컨텍스트 배포

/opt/tomcat/webapps/hello/index.html 을 만들고 본문에 LabHub 문자열을 넣습니다. http://127.0.0.1:8080/hello/ 가 200 이고 본문에 LabHub 가 있어야 합니다.

webapps 아래에 디렉터리를 만들면 그 이름이 컨텍스트 경로가 됩니다. WAR 없이도 배포가 됩니다.

정지 후 재기동

Tomcat 을 정지했다가 다시 기동합니다. (catalina.sh stop 30 -forcecatalina.sh start) 재기동 후에도 http://127.0.0.1:8080/hello/ 가 200 이어야 합니다.

정지 스크립트에 대기 시간과 -force 를 주는 습관을 들이세요. 재기동이 실제로 일어났는지는 catalina.out 의 기동 로그 개수로 확인할 수 있습니다.

setenv.sh 로 JVM 옵션 주입

/opt/tomcat/bin/setenv.sh 를 만들고 아래 옵션을 CATALINA_OPTS 로 정의한 뒤 재기동합니다. -Xms256m -Xmx256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/root/tc/dump /root/tc/dump 디렉터리도 미리 만들어 두세요. 실행 중인 자바 프로세스의 인자에 이 옵션들이 실제로 보여야 통과합니다.

catalina.sh 를 직접 고치면 톰캣 업그레이드 때 사라집니다. bin/setenv.sh 를 만들어 CATALINA_OPTS 를 정의하고, 반영되려면 재기동이 필요합니다. 실제 반영 여부는 프로세스의 실행 인자로 확인하세요.