27
JBoss AS: Dicas para Turbinar o servidor de Aplicações JBoss 7 Bruno Rossetto Machado Claudio Miranda Arquiteto de Sistemas Red Hat Brasil Principal Support Engineer Red Hat Brasil

Dicas para Turbinar o servidor de Aplicações JBoss 7

Embed Size (px)

DESCRIPTION

Palestra por Claudio Miranda (@claudio4j) e Bruno Rossetto (@brunorst) no evento JBoss in Bossa na data de 08/Out/2011 na cidade de Brasília.

Citation preview

Page 1: Dicas para Turbinar o servidor de Aplicações JBoss 7

JBoss AS: Dicas para Turbinar o servidor de Aplicações JBoss 7

Bruno Rossetto Machado

Claudio MirandaArquiteto de Sistemas

Red Hat Brasil

Principal Support EngineerRed Hat Brasil

Page 2: Dicas para Turbinar o servidor de Aplicações JBoss 7

Agenda

• Tuning• Threading• Slimming• MSC - Modular Service Container • Logging• Datasource• Dicas

Page 3: Dicas para Turbinar o servidor de Aplicações JBoss 7

Tuning

• Nível de personalização extrema• Maior performance, segurança, agilidade e beleza• Tornando-se diferente e único

Page 4: Dicas para Turbinar o servidor de Aplicações JBoss 7

Antes do tuning

• Precisa fazer tuning ?• Verifique onde efetuar a melhoria• Qual a parte que necessita melhorar

o Aplicaçãoo Servidor

• Testes de Performance e Stress• Documentação

Page 5: Dicas para Turbinar o servidor de Aplicações JBoss 7

Slimming: Retirando serviços do JBoss AS

Tempo de inicialização

Page 6: Dicas para Turbinar o servidor de Aplicações JBoss 7

DEMO

Page 7: Dicas para Turbinar o servidor de Aplicações JBoss 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.

Page 8: Dicas para Turbinar o servidor de Aplicações JBoss 7

MSC - Modular Service Container

Page 9: Dicas para Turbinar o servidor de Aplicações JBoss 7

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

Page 10: Dicas para Turbinar o servidor de Aplicações JBoss 7

Versatilidade com os serviços doJBoss AS

o Executar o container Java EE em um teste unitárioo Utilizar uma VM com o App. Server por aplicaçãoo Executar em ambientes como cloud, celulares, etco Desenvolvimento extremamente rápidoo Rodar diversas instâncias em seu laptop

Page 11: Dicas para Turbinar o servidor de Aplicações JBoss 7

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>

Page 12: Dicas para Turbinar o servidor de Aplicações JBoss 7

AS7: socket-binding-group e port-offset

• Command-Line Interface (CLI)$ ./jboss-admin.sh --connectConnected 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)

Page 13: Dicas para Turbinar o servidor de Aplicações JBoss 7

DEMO

Page 14: Dicas para Turbinar o servidor de Aplicações JBoss 7

AS7: subsystem=web

• /subsystem=web/connector=http<subsystem xmlns="urn:jboss:domain:web:1.0" default-virtual-server="default-host"><connector name="http" protocol="HTTP/1.1" socket-binding="http" scheme="http" max-connections="200"/><virtual-server name="default-host" enable-welcome-root="true"><alias name="localhost"/><alias name="example.com"/></virtual-server></subsystem>

• Atributo max-connections

Page 15: Dicas para Turbinar o servidor de Aplicações JBoss 7

AS7: subsystem=web

• Caso seja necessário, adicione o connector AJPo É 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"}

Page 16: Dicas para Turbinar o servidor de Aplicações JBoss 7

DEMO

Page 17: Dicas para Turbinar o servidor de Aplicações JBoss 7

Tuning de JVM Heap e Perm• -Xms -Xmx -XX:MaxPermSize

Algoritmos de GC• Throughput Collectors

o -XX:+UseParallelGCo -XX:+UseParallelOldGC

• Concurrent Mark-Sweep (CMS) Collectoro -XX:+UseConcMarkSweepGCo -XX:+UseConcMarkSweepGC - XX:+UseParNewGC

• G1 - JDK 1.6u14 ou JDK 7o -XX:+UseG1GC o Combina características do CMS e Paralelo o Suporte parcial a JVMTI

Page 18: Dicas para Turbinar o servidor de Aplicações JBoss 7

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"/>

Page 19: Dicas para Turbinar o servidor de Aplicações JBoss 7

Logging

• As configurações de fábrica são muito boas para desenv, mas não são apropriadas para produçãoo 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 performanceo Log duplicado em server.log e CONSOLE

Desabilite o output CONSOLE

Page 20: Dicas para Turbinar o servidor de Aplicações JBoss 7

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 logo Pode-se criar partição dedicada a logo Não irá impactar o App Server caso ocorra um DiskFull

-Djboss.server.log.dir=”/var/log/jboss”

• Limite o log em suas classeso 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

Page 21: Dicas para Turbinar o servidor de Aplicações JBoss 7

Datasource

• É um dos pontos mais importantes do Tuningo 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

Page 22: Dicas para Turbinar o servidor de Aplicações JBoss 7

Datasource

• Principais atributos a serem configuradoso 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

Page 23: Dicas para Turbinar o servidor de Aplicações JBoss 7

Datasource

• Principais atributos a serem configuradoso 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ãoo transaction-isolation

Valor default é definido pelo banco de dadoso prepared-statement-cache-size

Número de pstmt em cache por conexões. Default: 0-sem cacheo share-prepared-statements (true ou false)

Ao utilizar o mesmo statement duas vezes sem fecha-lo, utiliza-o mesmo

Page 24: Dicas para Turbinar o servidor de Aplicações JBoss 7

AS7: Datasource <datasource jndi-name="java:jboss/datasources/MySqlDS" pool-name="MySqlDS"> <connection-url>jdbc:mysql://localhost:3306/EJB3</connection-url> <driver>com.mysql</driver> <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation> <pool> <min-pool-size>75</min-pool-size> <max-pool-size>100</max-pool-size> <prefill>true</prefill> </pool> <security><user-name>test</user-name><password>test</password></security> <statement> <prepared-statement-cache-size>32</prepared-statement-cache-size> <share-prepared-statements/> </statement> <timeout> <blocking-timeout-millis>5000</blocking-timeout-millis> <idle-timeout-minutes>5</idle-timeout-minutes> </timeout> <validation> <valid-connection-checker class-name="org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker"/> </validation> </datasource>

Page 25: Dicas para Turbinar o servidor de Aplicações JBoss 7

Dicas

• Timeout comum•Connector HTTP•Apache Web Server (front end)•Datasources–Read timeout–Connection timeout

WEB AS DBUSER20s 10s

Page 26: Dicas para Turbinar o servidor de Aplicações JBoss 7

Dicas

• Balanceador de carga (apache ou hardware)• HTTP Cache• Content Delivery Network• Assista a palestra de modcluster, 14h• Escalabilidade vertical x horizontal

Page 27: Dicas para Turbinar o servidor de Aplicações JBoss 7

Perguntas

Principal Support EngineerRed Hat Brasil

[email protected]://twitter.com/brunorst

http://brmachado.blogspot.com

Bruno Rossetto Machado Claudio MirandaArquiteto de Sistemas

Red Hat Brasil