Dicas para Turbinar o servidor de Aplicações JBoss 7
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 8,010 views

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.

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.

Statistics

Views

Total Views
8,010
Views on SlideShare
8,007
Embed Views
3

Actions

Likes
7
Downloads
128
Comments
0

1 Embed 3

http://www.linkedin.com 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • 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
    • Agenda• Tuning• Threading• Slimming• MSC - Modular Service Container• Logging• Datasource• Dicas
    • Tuning• Nível de personalização extrema• Maior performance, segurança, agilidade e beleza• Tornando-se diferente e único
    • 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
    • Slimming: Retirando serviços do JBoss ASTempo de inicialização
    • DEMO
    • 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.
    • MSC - Modular Service Container
    • 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
    • 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
    • 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>
    • 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)
    • DEMO
    • 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
    • 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"}
    • DEMO
    • 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
    • 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"/>
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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>
    • Dicas • Timeout comum •Connector HTTP •Apache Web Server (front end) •Datasources –Read timeout –Connection timeout 20s 10sUSER WEB AS DB
    • Dicas• Balanceador de carga (apache ou hardware)• HTTP Cache• Content Delivery Network• Assista a palestra de modcluster, 14h• Escalabilidade vertical x horizontal
    • 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