Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

apache-tomcat-static-optimization

Apache + Tomcat (mod_jk AJP) 환경에서 정적 리소스만 갑자기 느려졌을 때 푸는 4단계 처방. 본인 사이트 운영 사례에서 정적 응답 0.133초 → 0.038초 (약 3.5배 향상).


어떤 상황에서 필요한가

  • Apache + Tomcat (mod_jk AJP) 환경 운영 중
  • 어느 시점부터 정적 리소스(CSS·JS·이미지·폰트) 로딩이 비정상으로 느림
  • 관리자 페이지(주로 동적)는 빠른데 사용자 페이지(정적 비중 ↑)만 느림
  • "동적은 Tomcat, 정적은 Apache"라는 원칙은 알지만 실제 구성이 안 되어 있음

결과 (실 측정값)

사이트 최적화 전 최적화 후 비고
사이트 A Tomcat 경유 (느림) 0.038초 Apache 직접 서빙으로 전환
사이트 B 0.133초 0.038초 약 3.5배 향상

추가 변화:

  • 스왑 메모리 2.3GB → 1.1GB (1.2GB가 RAM으로 복귀)
  • AJP Connector 병목 제거 (HTTP 풀과 800 스레드 공유)

4단계 한 줄 요약

  1. Alias + JkUnMount — 정적 리소스를 Apache가 직접 서빙. mod_jk 라우팅에서 제외
  2. RewriteCond 추가 — Rewrite가 먼저 동작해 JkUnMount를 무력화하지 않도록 정적 경로 제외 조건 추가
  3. AJP Connector executor 공유 — Tomcat HTTP 풀(800 스레드)과 AJP 풀을 일원화
  4. 스왑 정리swapoff -a && swapon -a 로 RAM 여유 회복

환경

  • OS: Rocky Linux 8 / CentOS 7 (RHEL 7+ 계열)
  • Apache: 2.4.46 (소스 빌드 또는 패키지)
  • Tomcat: 9.0.x
  • 연동: mod_jk 1.2.x (AJP)
  • 본 가이드는 위 조합에서 실 운영 적용한 사례를 일반화한 것이다.

문서 (단계별)

문서 내용
docs/00-context.md 어떤 상황 — 서버 이전 후 정적 리소스 지연
docs/01-diagnosis.md 진단 — "관리자 빠름·사용자 느림"이 알려주는 것
docs/02-jk-static-separation.md Step 1 — Alias + JkUnMount로 정적 분리
docs/03-rewrite-priority.md Step 2 — Rewrite 조건 추가 (JkUnMount보다 먼저 동작)
docs/04-ajp-thread-pool.md Step 3 — AJP Connector executor 공유
docs/05-swap-cleanup.md Step 4 — 스왑 정리 + 디스크 I/O 영향
docs/06-verification.md 측정 방법 + 결과
docs/07-further-improvements.md 추가 권장 — HTTP/2 · Lazy Loading · 이미지 최적화
docs/08-pitfalls.md 자주 만나는 함정 6개

설정 예시: configs/ · 측정 스크립트: scripts/


빠른 적용 흐름

# 1. 진단 - 측정 스크립트로 현재 상태 확인
./scripts/measure.sh https://your-domain.example/static/sample.css

# 2. Apache vhost에 Alias + JkUnMount + RewriteCond 적용 (configs/httpd-vhosts.conf.example 참조)
sudo systemctl reload httpd

# 3. Tomcat AJP Executor 공유 적용 (configs/server.xml.example 참조)
sudo systemctl restart tomcat

# 4. 스왑 정리 (RAM 여유 사전 확인)
./scripts/swap-check.sh
sudo swapoff -a && sudo swapon -a

# 5. 재측정
./scripts/measure.sh https://your-domain.example/static/sample.css

관련 저장소

본 저장소는 성능 측면. 보안과 성능, 같은 Apache 운영의 두 면.


라이선스

MIT.

본인 환경의 도메인·내부 경로·사내 식별자는 모두 일반 예시로 치환되어 있습니다. 가져가서 본인 환경에 맞게 적용하세요. 핵심은 절차 자체가 아니라 "왜 그렇게 분리하는가"입니다.

About

Apache + Tomcat (mod_jk AJP) 환경에서 정적 리소스만 갑자기 느려졌을 때 푸는 4단계 처방 - JkUnMount + Rewrite 우선순위 + AJP executor 공유 + 스왑 정리. 본인 사이트 운영 사례에서 약 3.5배 향상

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages