====== 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