Tomcat 인스턴스와 JVM 옵션
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 을 먼저 합니다.