저작권 안내: 저작권자표시 Yes 상업적이용 No 컨텐츠변경 No

스프링5 입문

JSP 2.3

JPA 입문

DDD Start

인프런 객체 지향 입문 강의

이클립스에서 톰캣 서버를 구동하다보면 아래 그림과 같이 "Server Tomcat Server at localhost was unable to start within 45 seconds" 메시지가 뜨면서 톰캣 서버 실행에 실패할 때가 있다.



이 경우 이클립스의 톰캣 서버 실행 제한 시간을 늘려주거나 실행 시간에 영향을 주는 원인을 제거하면 된다. 이 글에서는 실행 시간을 늘려주는 방법을 설명한다.


먼저 이클립스의 [Window] -> [Show View] -> [Other] 메뉴를 실행한 뒤에 Server/Servers 뷰를 선택하고 오픈한다. Servers 뷰에서 서버를 더블 클릭하면 아래와 같이 편집 영역에 서버 설정 정보가 보인다.



서버 설정 정보에서 Timeouts을 클릭하면 아래 그림과 같이 설정 시간을 변경할 수 있는데 여기서 Start 항목의 시간을 늘려준 뒤 저장(CTRL + S)하면 된다.



톰캣 구동 시간 자체를 줄이는 방법 중 하나로 jar 파일 스캔 제외처리가 있는데 이에 대한 내용은 "Jar 파일 스캔 제외로 톰캣 시작 시간 단축(http://javacan.tistory.com/475)" 글을 참고한다.



Posted by 최범균 madvirus

댓글을 달아 주세요

  1. sweet 2018.02.27 14:58 신고  댓글주소  수정/삭제  댓글쓰기

    저 같은경우엔 항상 999로 설정해 두는데 프로그램 마다 엄청 무거운것들이 있어서 구동되는데만 5분 이상 걸리니 여유롭게 쓸 수 있더라고요.
    근데 이 시간이 이렇게 999 길게 걸어두었을 때 문제가 되는 부분이 있을까요?
    단순히 시간제한에 대한 설정으로 timeout만 걸리지 않는걸까요?

    • 최범균 madvirus 2018.02.28 10:34 신고  댓글주소  수정/삭제

      999초면 15분 이상으로 잡은거네요. 다소 길게 느껴지긴 합니다. 근데 이 시간은 이클립스의 톰캣 구동 시간 타이아웃이니까 길게 잡는다고 문제가 될 건 없어 보입니다.
      실제 구동 시간이 5분 이상 걸리는 점이 문제가 될 순 있을 것 같아요.

톰캣 구동 속도에 영향을 주는 것은 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 파일을 설정했다면 다시 톰캣을 구동해보자. 설정 전보다 빠르게 구동되는 것을 확인할 수 있을 것이다.


Posted by 최범균 madvirus

댓글을 달아 주세요