Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Dicas para Turbinar o servidor de Aplicações JBoss 7
1. JBoss AS: Dicas para Turbinar o
servidor de Aplicações JBoss 7
Claudio Miranda
Arquiteto de Sistemas
Red Hat Brasil
Bruno Rossetto Machado
Principal Support Engineer
Red Hat Brasil
3. Tuning
• Nível de personalização extrema
• Maior performance, segurança, agilidade e beleza
• Tornando-se diferente e único
4. Antes do tuning
• Precisa fazer tuning ?
• Verifique onde efetuar a melhoria
• Qual a parte que necessita melhorar
o Aplicação
o Servidor
• Testes de Performance e Stress
• Documentação
7. MSC - Modular Service Container
• AS7 baseado no MSC
• Leve e eficiente
• Inicialização assíncrona de serviços
• Maquina de estados: UP, DOWN, REMOVED,
STARTING, STOPPING,START_FAILED
• Gerenciamento de dependências
• Maiores detalhes na palestra "JBoss AS 7" as 17:30 com
Flavia Rainone, no auditório.
9. Domains, Servers e Controllers
* Modo “domain” ou “domínio” = Conjunto de servidores
* Domain Controller é o gerenciador
* Server group = agregação de
instâncias
* Foco: Gerenciamento de
Vários servidores em uma
interface
10. Versatilidade com os serviços do
JBoss AS
o Executar o container Java EE em um teste unitário
o Utilizar uma VM com o App. Server por aplicação
o Executar em ambientes como cloud, celulares, etc
o Desenvolvimento extremamente rápido
o Rodar diversas instâncias em seu laptop
11. AS7: socket-binding-group e port-offset
• Diferentes portas podem ser configuradas de forma
automatizada com o atributo port-offset
• standalone.xml
<socket-binding-group name="standard-sockets" default-interface="public" port-
offset="100">
• domain.xml
<server ...>
<socket-binding-group ref="standard-sockets" port-offset="150"/>
</server>
<server ...>
<socket-binding-group ref="ha-sockets" port-offset="250"/>
</server>
12. AS7: socket-binding-group e port-offset
• Command-Line Interface (CLI)
$ ./jboss-admin.sh --connect
Connected to standalone controller at localhost:9999
[standalone@localhost:9999 /] /socket-binding-group=standard-sockets:read-resource-
description
[standalone@localhost:9999 /] /socket-binding-group=standard-sockets:write-
attribute(name=port-offset,value=200)
15. AS7: subsystem=web
• Caso seja necessário, adicione o connector AJP
o É utilizado quando as requisições passam pelo mod_cluster,
mod_jk ou mod_proxy_ajp para balancemanto de carga
[standalone@localhost:9999 /] /socket-binding-group=standard-sockets/socket-
binding=ajp:add(port=8009)
{"outcome" => "success"}
[standalone@localhost:9999 /] /subsystem=web/connector=ajp:add(socket-binding=ajp,
protocol="AJP/1.3", enabled=true)
{"outcome" => "success"}
17. Tuning de JVM
Heap e Perm
• -Xms -Xmx -XX:MaxPermSize
Algoritmos de GC
• Throughput Collectors
o -XX:+UseParallelGC
o -XX:+UseParallelOldGC
• Concurrent Mark-Sweep (CMS) Collector
o -XX:+UseConcMarkSweepGC
o -XX:+UseConcMarkSweepGC - XX:+UseParNewGC
• G1 - JDK 1.6u14 ou JDK 7
o -XX:+UseG1GC
o Combina características do CMS e Paralelo
o Suporte parcial a JVMTI
18. Tuning de JVM
• Recomendações
-XX:+UseCompressedOops (quando 64 bits)
-XX:+CMSClassUnloadingEnabled
-XX:+DisableExplicitGC
-Xss256k
bin/domain.conf
bin/standalone.conf
- OU
<server-groups>
<server-group name="group1" profile="default">
<jvm name="default">
<heap size="64m" max-size="512m"/>
19. Logging
• As configurações de fábrica são muito boas para
desenv, mas não são apropriadas para produção
o Nível de log é muito detalhado
Sempre que possível diminua para WARN ou ERROR
O maior responsável pelo atraso é o I/O. Quanto menos I/O,
melhor performance
o Log duplicado em server.log e CONSOLE
Desabilite o output CONSOLE
20. Logging
• Diretórios de log default:
o standalone: {jboss.home}/standalone/log ou
o domain: {jboss.home}/domain/log/host-controller
{jboss.home}/domain/log/process-controller
{jboss.home}/domain/servers/server-one/log
• Separe o diretório gravação de log
o Pode-se criar partição dedicada a log
o Não irá impactar o App Server caso ocorra um DiskFull
-Djboss.server.log.dir=”/var/log/jboss”
• Limite o log em suas classes
o if (logger.debugEnabled()) { logger.debug(“bla”); }
Caso contrário, sua aplicação irá criar instâncias de String para
cada declaração e o Log4j irá criar LoggingEvent
21. Datasource
• É um dos pontos mais importantes do Tuning
o Necessário entender quanto sua aplicação precisa para atender à
demanda atual de requisições
Utilize ferramentas de monitoração
Deve-se pensar em um valor que não prejudique a performance
do Banco de Dados e limite seu acesso. Melhor estourar o limite
do pool do App. Server que o número de sessões do BD
Em contra-partida, um pool muito pequeno fará com que
requisições esperem que uma conexão esteja disponível para
continuar o acesso, prejudicando a performance da aplicação
22. Datasource
• Principais atributos a serem configurados
o min-pool-size e max-pool-size
Para maior Throughput: se você já sabe que sua aplicação irá
utilizar na maior parte do tempo 75 conexões, atribua 75 para o
valor de min-pool-size e defina somente uma folga para max-pool-
size
o prefill (true ou false)
Abre de cara conexões com o BD até preencher min-pool-size
o blocking-timeout-millis
Bloqueia a obtenção de novas conexões pelo tempo definido
nesta propriedade. Quando o tempo expira, lança uma Exception
e a tentativa de conexão é descartada
23. Datasource
• Principais atributos a serem configurados
o idle-timeout-minutes
Tempo para uma conexão idle ser fechada. Default: 15 min.
o valid-connection-checker|check-valid-connection-sql
Verifica integridade da conexão
o transaction-isolation
Valor default é definido pelo banco de dados
o prepared-statement-cache-size
Número de pstmt em cache por conexões. Default: 0-sem cache
o share-prepared-statements (true ou false)
Ao utilizar o mesmo statement duas vezes sem fecha-lo,
utiliza-o mesmo
25. Dicas
• Timeout comum
•Connector HTTP
•Apache Web Server (front end)
•Datasources
–Read timeout
–Connection timeout
20s 10s
USER WEB AS DB
26. Dicas
• Balanceador de carga (apache ou hardware)
• HTTP Cache
• Content Delivery Network
• Assista a palestra de modcluster, 14h
• Escalabilidade vertical x horizontal
27. Perguntas
Bruno Rossetto Machado Claudio Miranda
Principal Support Engineer Arquiteto de Sistemas
Red Hat Brasil Red Hat Brasil
bmachado@redhat.com
http://twitter.com/brunorst
http://brmachado.blogspot.com