홈 › 웹 서버 › 03 / 8

Tomcat 인스턴스와 JVM 옵션

섹션 7진행 0 / 8

5. 자주 하는 실수 (Tip)

❌ 실수 1: CATALINA_HOME 의 conf 를 직접 고친다

인스턴스를 분리한 의미가 없어지고, 실행 파일 업그레이드 때 설정이 뒤섞입니다. 항상 CATALINA_BASE 쪽 conf 를 고칩니다.

❌ 실수 2: 인스턴스 포트를 그대로 복사한다

두 번째 인스턴스의 HTTP·종료 포트를 첫 번째와 같게 두면 기동이 실패합니다. 포트표를 만들어 인스턴스를 추가할 때마다 확인합니다.

❌ 실수 3: setenv.sh 를 CATALINA_HOME/bin 에만 둔다

CATALINA_BASE/bin/setenv.sh 가 없으면 모든 인스턴스가 같은 JVM 옵션을 씁니다. 인스턴스별 힙·GC 를 다르게 주려는 목적을 놓칩니다.

❌ 실수 4: Xms 를 Xmx 보다 작게 둔다

런타임 중 힙이 늘어날 때 리사이즈 지연이 생깁니다. 서버용 인스턴스는 Xms=Xmx 로 고정하는 편이 안전합니다.

❌ 실수 5: HeapDumpPath 를 지정하지 않는다

OOM 이 나도 덤프가 어디 생겼는지 몰라 원인 분석을 못 합니다. 로그 폴더처럼 디스크 여유가 있는 경로를 미리 지정합니다.

❌ 실수 6: JNDI 비밀번호를 context.xml 에 평문으로 커밋한다

context.xml 이 저장소에 그대로 올라가면 비밀번호가 노출됩니다. 실무 확장 13 암호화나 외부 값 주입으로 분리합니다.

❌ 실수 7: 드라이버 jar 를 CATALINA_HOME/lib 에 둔다

인스턴스마다 다른 버전의 드라이버가 필요할 때 충돌합니다. 인스턴스 전용 CATALINA_BASE/lib 에 둡니다.

❌ 실수 8: 인스턴스마다 유닛 파일을 복붙한다

이름만 다른 유닛 파일이 늘어나 관리가 어려워집니다. %i 템플릿 유닛 하나로 모든 인스턴스를 기동합니다.

❌ 실수 9: logs 심볼릭 링크 없이 CATALINA_BASE/logs 를 그대로 둔다

로그가 인스턴스마다 흩어져 백업 스크립트가 인스턴스 수만큼 늘어납니다. $BASE/logs/<이름> 으로 링크해 한 곳에서 관리합니다.

❌ 실수 10: 이전 단일 인스턴스 유닛을 그대로 켜둔다

01-tomcat-install 레슨에서 만든 tomcat.service 를 끄지 않고 tomcat@app1 을 올리면 같은 포트를 두 프로세스가 다투게 됩니다. 다중 인스턴스로 전환하면 systemctl disable --now tomcat 을 먼저 합니다.