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

11,103 views
10,737 views

Published on

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.

Published in: Technology

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

  1. 1. JBoss AS: Dicas para Turbinar oservidor de Aplicações JBoss 7 Claudio Miranda Arquiteto de Sistemas Red Hat Brasil Bruno Rossetto Machado Principal Support Engineer Red Hat Brasil
  2. 2. Agenda• Tuning• Threading• Slimming• MSC - Modular Service Container• Logging• Datasource• Dicas
  3. 3. Tuning• Nível de personalização extrema• Maior performance, segurança, agilidade e beleza• Tornando-se diferente e único
  4. 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
  5. 5. Slimming: Retirando serviços do JBoss ASTempo de inicialização
  6. 6. DEMO
  7. 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.
  8. 8. MSC - Modular Service Container
  9. 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. 10. Versatilidade com os serviços do JBoss ASo 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
  11. 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. 12. 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)
  13. 13. DEMO
  14. 14. 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
  15. 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"}
  16. 16. DEMO
  17. 17. Tuning de JVMHeap e Perm • -Xms -Xmx -XX:MaxPermSizeAlgoritmos 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. 18. Tuning de JVM • Recomendações-XX:+UseCompressedOops (quando 64 bits)-XX:+CMSClassUnloadingEnabled-XX:+DisableExplicitGC-Xss256kbin/domain.confbin/standalone.conf- OU<server-groups> <server-group name="group1" profile="default"> <jvm name="default"> <heap size="64m" max-size="512m"/>
  19. 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. 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. 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. 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. 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
  24. 24. 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>
  25. 25. Dicas • Timeout comum •Connector HTTP •Apache Web Server (front end) •Datasources –Read timeout –Connection timeout 20s 10sUSER WEB AS DB
  26. 26. Dicas• Balanceador de carga (apache ou hardware)• HTTP Cache• Content Delivery Network• Assista a palestra de modcluster, 14h• Escalabilidade vertical x horizontal
  27. 27. PerguntasBruno Rossetto Machado Claudio Miranda Principal Support Engineer Arquiteto de Sistemas Red Hat Brasil Red Hat Brasil bmachado@redhat.com http://twitter.com/brunorsthttp://brmachado.blogspot.com

×