Peter Roßbachs Tomcat 6 Talk på RheinJUG
Peter Roßbach, kerneudvikler på Tomcat-projektet, holdt en snak på RheinJUG i Düsseldorf torsdag. Det var en meget dejlig blanding af Tomcat-arkitektur, bedste praksis, Open Source-fællesskab samt nuværende og fremtidige udviklinger, snarere end en tør teknisk snak.
Justering af Tomcat-ydelse
Med hensyn til ydeevne nævnte han, at den største negative faktor er at bruge udviklingstilstand til produktionsmiljøer. Tjek et par parametre, som påvirker Tomcats ydeevne.
Fra Tomcat 6 er der den forbedrede protokolhåndtering tilgængelig:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" /> |
derudover driver Java NIO en ny forbedret mulighed for fildownload. Servlets skal bare indstille sendefilanmodningsparametre og ikke udsende flere data. Den fil vil derefter blive pushet af tomcat til brugeren:
org.apache.tomcat.sendfile.filename: Canonical filename of the file which will be sent as a String org.apache.tomcat.sendfile.start: Start offset as a Long org.apache.tomcat.sendfile.end: End offset as a Long |
org.apache.tomcat.sendfile.filename:Kanonisk filnavn på filen, der vil blive sendt som en streng org.apache.tomcat.sendfile.start:Start offset som en lang org.apache.tomcat.sendfile.end:Slut offset som en lang
produktionsservere bør ikke implementere automatisk:
<Host name="localhost" autoDeploy="false" deployOnStartup="false" deployXML="false"> |
Jasper JSP-kompileren bør også indstilles:
<servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>development</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>genStringAsCharArray</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>trimSpaces</param-name> <param-value>true</param-value> </init-param> </servlet> |
Brug mod_jk til belastningsbalancering
Som et andet hovedemne i hans foredrag præsenterede han modulet "mod_jk", som i forbindelse med en Apache Httpd og Tomcat AJP-protokollen gør det muligt at distribuere java-applikationer på flere Tomcat-servere.
Han forklarede de forskellige loadbalancing-opsætninger, og at det måske endda giver mening at bruge en Tomcat-server pr. applikation, da dette giver bedre hukommelsesstyring og forbedrer den generelle høje tilgængelighed.
Tomcat-konfiguration:
<Connector port="8009" protocol="AJP/1.3"/> <Engine name="Catalina" defaultHost="localhost" jvmRoute="node01"> |
mod_jk Konfiguration inde i Httpd:
<IfModule !mod_jk.c> LoadModule jk_module "modules/mod_jk.so" </IfModule> JkShmFile "logs/mod_jk.shm" JKWorkerProperty worker.list=loadbalancer JKWorkerProperty worker.node01.port=8009 JKWorkerProperty worker.node01.host=localhost JKWorkerProperty worker.node01.type=ajp13 JKWorkerProperty worker.loadbalancer.type=lb JKWorkerProperty worker.loadbalancer.connection_pool_minsize=0 JKWorkerProperty worker.loadbalancer.connect_timeout=30000 JKWorkerProperty worker.loadbalancer.prepost_timeout=10000 JKWorkerProperty worker.loadbalancer.balance_workers=node01 JKWorkerProperty worker.loadbalancer.method=Request JKWorkerProperty worker.loadbalancer.retries=2 JKWorkerProperty worker.loadbalancer.recovery_options=7 JKMount /myapps* loadbalancer |
Yderligere dokumentation om mod_jk worker kan findes her:
http://tomcat.apache.org/connectors-doc/reference/workers.html
I alt en meget interessant foredrag, med masser af ting at lære af, lad det være Tomcat-projektet eller Tomcat-arkitekturen, eller hvordan Open Source "lever", og hvad man som udvikler eller arkitekt bør overveje, når man udvikler en Java-webapplikation.