처방 들어가기 전 본인 환경이 이 가이드의 시나리오와 맞는지 확인.
# 정적 리소스 URL에 curl
curl -I https://your-domain.example/resources/css/main.css응답 헤더에 Server: Apache + Tomcat의 흔적(X-Powered-By 등)이 같이 보이면 의심.
더 확실하게:
# Apache access_log
tail -f /usr/local/httpd/logs/access_log | grep "css/main.css"
# Tomcat catalina.out 또는 access log
tail -f /usr/local/tomcat/logs/localhost_access_log.YYYY-MM-DD.log | grep "css/main.css"Tomcat access log에 정적 파일 요청이 찍히면 진단 1 확정.
# Apache rewrite 로그 활성화 (임시)
# httpd.conf 또는 vhost
LogLevel rewrite:trace3재기동 후 정적 리소스 요청을 보내면 rewrite_log 또는 error_log에 변환 흔적이 보인다.
RewriteEngine: applying rules to /resources/css/main.css
RewriteRule: substituting /ott/resources/css/main.css
이런 라인이 보이면 Rewrite가 정적 경로를 건드리는 중. JkUnMount를 무력화하는 그 패턴.
# Tomcat server.xml
grep -A 5 "AJP/1.3" /usr/local/tomcat/conf/server.xml<Connector protocol="AJP/1.3" port="8009"
... />
<!-- executor=... 가 없거나, HTTP Connector와 다른 executor를 가리키면 진단 3 해당 -->또는 런타임에 JMX/Manager 화면에서 ThreadPool 사이즈 확인:
http-nio-8080: maxThreads=800
ajp-nio-8009: maxThreads=200 ← 별도 풀, 작음
free -h total used free shared buff/cache available
Mem: 15Gi 9.0Gi 1.5Gi 400Mi 5.0Gi 6.0Gi
Swap: 8.0Gi 2.3Gi 5.7Gi
Mem.available이 충분 (4GB 이상)Swap.used가 1GB 이상
둘 다 해당하면 진단 4. RAM 여유 있는데 스왑이 점유된 상태 = 디스크 I/O 발생 중.
| 진단 | 해당 | 적용 단계 |
|---|---|---|
| 1 — 정적이 Tomcat 경유 | ☐ | Step 1 (02-jk-static-separation.md) |
| 2 — Rewrite가 정적 경로 변환 | ☐ | Step 2 (03-rewrite-priority.md) |
| 3 — AJP 별도 풀 (작음) | ☐ | Step 3 (04-ajp-thread-pool.md) |
| 4 — 스왑 1GB+ 사용 중 | ☐ | Step 4 (05-swap-cleanup.md) |
체크된 항목만 순서대로 적용해도 되고, 시간 여유 있으면 4개 다 적용해도 좋다. 진단 1·2만 해결해도 정적 응답 시간 차이가 가장 크게 난다.
전 단계를 한 번에 적용하지 말고, 하나 적용 → 측정 → 다음 적용 흐름 권장:
# 측정 스크립트
./scripts/measure.sh https://your-domain.example/resources/css/main.css
# 결과 기록 → 다음 단계 적용 → 다시 측정 → 차이 확인각 단계가 어느 정도 효과인지 본인 환경에서 검증 가능.
다음 문서 → 02-jk-static-separation.md