CONTEÚDO
- Visão Geral
- Configuração server.xml
- Configuração context.xml
- Configuração catalina.properties
- Protocolos (APR e NIO)
01. VISÃO GERAL
Esse documento tem por objetivo mostrar como configurar o Tomcat para uso otimizado com o produto Datasul. Para mais informações sobre configurações e performance Tomcat acesse https://tomcat.apache.org/
Como o Tomcat possui uma estrutura de pastas padrão as configurações realizadas nesse documento são sempre feitas nos arquivos encontrados na pastas $CATALINA_HOME\conf.
02. CONFIGURAÇÃO SERVER.XML
Primeiramente faça um backup do arquivo server.xml e altere o arquivo conforme abaixo:
Threads vs Cores
Importante ressaltar que a propriedade maxThreads e o acceptCount pode ser considera por Core da máquina. No exemplo abaixo a configuração foi feita para uma máquina de 4 cores ou seja 200 threads para cada core e 100 acceptCount para cada core.
Essa conta deve ser levada em consideração no momento da definição das threads e acceptCount que o ambiente pode fazer uso.
... <Connector port="8288" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxThreads="800" acceptCount="400" enableLookups="false"/> ... <Host name="localhost" appBase="webapps" startStopThreads="20" unpackWARs="true" autoDeploy="true"> ...
03. CONFIGURAÇÃO CONTEXT.XML
Primeiramente faça um backup do arquivo server.xml e altere o arquivo conforme abaixo:
... <Context crossContext="true" swallowOutput="true" sessionCookiePath="/"> <JarScanner> <JarScanFilter tldSkip="*.jar" tldScan="log4j-taglib*.jar,log4j-web*.jar,log4javascript*.jar,slf4j-taglib*.jar,spring-webmvc*.jar,jstl*.jar"/> </JarScanner> ... </Context>
04. CONFIGURAÇÃO CATALINA.PROPERTIES
Primeiramente faça um backup do arquivo catalina.properties e altere o arquivo conforme abaixo:
Atributo jarsToSkip - deve ficar apenas com uma linha (tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar), todas as demais linhas devem ser removidas:
#ANTES ... tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\ annotations-api.jar,\ ant-junit*.jar,\ ant-launcher*.jar,\ ant*.jar,\ asm-*.jar,\ aspectj*.jar,\ bcel*.jar,\ ... #DEPOIS ... tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar ...
Atributo jarsToScan - deve manter as linhas já existentes e adicionar 3 novas linhas ao final (spring-webmvc*.jar, totvs*.jar e jstl*.jar):
#ANTES ... tomcat.util.scan.StandardJarScanFilter.jarsToScan=\ log4j-taglib*.jar,\ log4j-web*.jar,\ log4javascript*.jar,\ slf4j-taglib*.jar ... #DEPOIS ... tomcat.util.scan.StandardJarScanFilter.jarsToScan=\ log4j-taglib*.jar,\ log4j-web*.jar,\ log4javascript*.jar,\ slf4j-taglib*.jar,\ spring-webmvc*.jar,\ totvs*.jar,\ jstl*.jar ...
05. PROTOCOLOS (APR E NIO)
Para uso em produção o uso do APR pode ser configurado no produto, o qual, possui implementações que são mais performáticas em relação ao NIO. O APR possui distribuição para Wnidows e Unix no entanto, para unix é preciso fazer a compilação e gerar o lib nativamente.
Para mais informações sobre fontes e compilações acessar https://tomcat.apache.org/native-doc/
O arquivo tacnative-1.dll deve estar no bin do Tomcat para que funcione corretamente.
Uma vez com a lib no ambiente basta configurar o server.xml de acordo com a configuração abaixo. note o procotolo com a classe do APR
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> ... <Connector port="8288" protocol="org.apache.coyote.http11.Http11AprProtocol" connectionTimeout="20000" redirectPort="8443" maxThreads="800" acceptCount="400" enableLookups="false"/> ...
Uma vez configurado o APR o sistema inicia informando a porta no modo APR de acordo com o log abaixo:
16-Jul-2022 15:55:29.519 INFORMAÇÕES [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8288"]
16-Jul-2022 15:55:29.551 INFORMAÇÕES [main] org.apache.catalina.startup.Catalina.start Server startup in [46476] milliseconds
A performance do produto depende dos ambientes, memória e core de cada servidor e os dados acima servem para a maioria dos casos. O uso do APR ou NIO também dependerá do uso do sistema e a carga de processamento. Na maioria dos casos o APR demonstrou um consumo de cpu menor do que o NIO, importante ressaltar que o NIO é a implementação default tomcat. Caso ainda exista dúvidas no uso do protocolo acesse o endereço abaixo e veja a tabela comparativa.
https://tomcat.apache.org/tomcat-9.0-doc/config/ajp.html#Connector_Comparison
Além disso, a configuração padrão da JVM para Garbage Collector atende à todos os cenários testados, porém caso seja necessário configurar esse item deve-se adicionar o diretiva -XX:+UseG1GC no start da VM java.