주요글: 도커 시작하기
반응형

톰캣 구동 속도에 영향을 주는 것은 jar 파일 탐색이다. 톰캣은 기본적으로 다음의 두 가지를 위해 jar 파일의 클래스나 자원을 스캔한다.

  • 특정 애노테이션을 가진 클래스 검색
  • TLD 파일

위 내용과 상관없는 jar 파일을 스캔 대상에서 제외하면 톰캣 구동 속도가 그만큼 빨라진다.


대상 jar 파일을 찾기 위한 로깅 설정


톰캣을 구동할 때 로그에 아래와 같은 메시지가 출력될 때가 있다.


org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.


이 메시지는 웹 어플리케이션에 포함된 jar 파일을 탐색하는데 해당 jar 파일에 커스텀 태그와 관련된 TLD 파일이 없을 때 발생한다. TLD 파일이 없는 jar 파일을 탐색하는 건 시간 낭비이므로 TLD 파일 검색 대상에서 해당 jar 파일을 제외하면 톰캣 시작 시간을 줄일 수 있다.


추가로 웹 어플리케이션과 관련된 애노테이션을 붙인 클래스가 없는 jar 파일을 검색하는 것 역시 톰캣 구동 시간을 느리게 만드므로 이런 jar 파일도 검색 대상에서 제외하면 톰캣 시작 시간을 줄일 수 있다.


이 두 종류의 jar 파일을 찾아내기 위해 [톰캣]/conf/logging.properties 파일에 TLD 관련 로그 레벨을 FINE으로 바꾼다.


# logging.properties 파일 하단에 추가


# 탐색하는 jar 파일 목록 출력

org.apache.catalina.startup.ContextConfig.level = FINE

# TLD 관련 로그 출력

org.apache.jasper.servlet.TldScanner.level = FINE


톰캣을 재시작하면 아래와 같은 로그가 출력되는 것을 확인할 수 있다.


22-Feb-2018 13:25:52.781 미세 [localhost-startStop-1] org.apache.catalina.startup.ContextConfig.processAnnotationsJar Scanning jar file for class files with annotations [file:/C:/Java/jdk1.8.0_51/jre/lib/rt.jar]

...

...

22-Feb-2018 20:42:24.130 미세 [localhost-startStop-1] org.apache.jasper.servlet.TldScanner$TldScannerCallback.scan No TLD files were found in [file:/C

:/apache-tomcat-8.5.27/webapps/sp5-chap09/WEB-INF/lib/spring-expression-5.0.2.RELEASE.jar]. Consider adding the JAR to the tomcat.util.scan.StandardJarScanFilter.jarsToSkip property in CATALINA_BASE/conf/catalina.properties file.


애노테이션 스캔 대상 jar 파일과 TLD 파일이 없는 jar 파일을 확인하고 [톰캣]/conf/catalina.properties 파일에 탐색 생략 대상으로 추가한다. 아래 코드는 JDK의 rt.jar 파일과 spring 관련 jar 파일을 생략 대상에 추가한 예이다.


tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\

bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,\

...생략

xom-*.jar,\

rt.jar,\

spring-*.RELEASE.jar


tomcat.util.scan.StandardJarScanFilter.jarsToScan=\

log4j-web*.jar,log4j-taglib*.jar,log4javascript*.jar,slf4j-taglib*.jar,\

spring-webmvc-*.jar



위 코드에서 tomcat.util.scan.StandardJarScanFilter.jarsToScan 속성(검색 대상)에 spring-webmvc-*.jar 를 추가했는데 이는 spring-webmvc 모듈에 스프링이 제공하는 커스텀 태그와 관련된 TLD 파일이 포함되어 있기 때문이다. spring-webmvc 모듈을 검색 대상에 넣지 않으면 <spring:message>와 같이 스프링이 제공하는 커스텀 태그를 사용할 수 없게 된다.


이클립스에서는 다음과 같이 Servers 프로젝트의 catalina.properties 파일을 수정하면 된다.




catalina.properties 파일에 검색 대상 jar 파일을 설정했다면 다시 톰캣을 구동해보자. 설정 전보다 빠르게 구동되는 것을 확인할 수 있을 것이다.


+ Recent posts