====== Tomcat Performance Tuning ====== * [[http://www.genericarticles.com/mediawiki/index.php?title=How_to_optimize_tomcat_performance_in_production|How to optimize tomcat performance in production - Wiki]] ===== Fastest Servlets in the West ===== * [[https://www.youtube.com/watch?v=uMtYcWB7Z4s|Fastest Servlets in the West?]] * [[http://www.slideshare.net/SpringCentral/williams-fastest-servlets-in-the-west|Fastest Servlets in the West? - Slide]] * [[https://www.youtube.com/watch?v=LBSWixIwMmU|(4) Apache Tomcat Connector Selection]] * 결론 * Tomcat Connector 는 그냥 NIO 를 사용하는게 낫다. SSL 사용시에는 NIO + OpenSSL. * 과거에는 SSL 사용시에 APR이 가장 성능이 좋았으나, SSL을 사용하지 않을 때는 NIO,NIO2 와 성능처이가 거의 없다. * JVM GC 튜닝 * JVM 옵션 튜닝은 한번에 하나씩만 변경하면서 하라. * Profiling을 하라. ===== WebappClassLoader lock ===== * ''WebappClassLoader''에서 ''loadClass''를 할 때 전역 Lock이 걸리게 되어 클래스로더를 사용하는 코드들이 전부 lock이 걸리게 된다. * Tomcat 8/7 최신 버전에서는 ''ParallelWebappClassLaoder''로 변경하여 해결 가능하다. * ''context.xml의 Loader 항목'' * [[http://tomcat.apache.org/tomcat-8.0-doc/config/loader.html|Tomcat 8 The Loader Component]] * [[https://bz.apache.org/bugzilla/show_bug.cgi?id=57681|Tomcat 7 ParallelWebappClassLoader backport]] ===== 구동(boot) 시간 줄이기 ===== ==== 불필요한 TLD 스캔 시간 줄이기 ==== * [[http://javacan.tistory.com/475|Jar 파일 스캔 제외로 톰캣 시작 시간 단축]] * ''logging.properties''에서 scan한 파일 로그 확인 org.apache.jasper.servlet.TldScanner.level = FINE * ''catalina.properties''에서 특정 jar 파일들을 TLD 파일을 찾기위해 스캔하는 것을 방지해준다. # scan 에서 제외 tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\ bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,\ xom-*.jar,\ rt.jar,\ spring-*.RELEASE.jar # scan 대상 tomcat.util.scan.StandardJarScanFilter.jarsToScan=\ log4j-web*.jar,log4j-taglib*.jar,log4javascript*.jar,slf4j-taglib*.jar,\ spring-webmvc-*.jar