Tomcat & nginx 운영 · Tomcat 구조와 server.xml · 실습
Tomcat 기동하고 구조 파악하기
목표
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 -force 후 catalina.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 디렉터리도 미리 만들어 두세요.
실행 중인 자바 프로세스의 인자에 이 옵션들이 실제로 보여야 통과합니다.
참고
java -version 2> /root/tc/java.txt— 버전 정보는 표준에러로 나갑니다.ss -ltn으로 LISTEN 포트를 봅니다.grep,awk -F:로 포트만 뽑으세요.- 실행 중 JVM 인자 확인:
ps -ef | grep java또는tr '\0' ' ' < /proc/<PID>/cmdline - 흔한 실수 1: 기동 직후 바로
curl해서 실패하는 것. 몇 초 기다리거나 재시도하세요. - 흔한 실수 2:
setenv.sh를 만들고 재기동하지 않아 옵션이 적용 안 되는 것. - 흔한 실수 3:
setenv.sh에CATALINA_OPTS=대신JAVA_OPTS=를 쓰는 것.
둘 다 동작하지만 stop 시에도 적용되는 JAVA_OPTS 와 달리 CATALINA_OPTS 는
기동에만 적용됩니다. 힙 옵션은 CATALINA_OPTS 가 맞습니다.
단계 8개
- JDK 버전 확인
- 디렉터리 역할 정리
- Tomcat 기동
- 기동 소요 시간 확인
- 리슨 포트 확인
- 정적 컨텍스트 배포
- 정지 후 재기동
- setenv.sh 로 JVM 옵션 주입