SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
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
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 AS
Tempo 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 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
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 --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)
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 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
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"/>
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        10s
USER     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
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

Mais conteúdo relacionado

Mais procurados

Introduction to Khronos SYCL
Introduction to Khronos SYCLIntroduction to Khronos SYCL
Introduction to Khronos SYCLMin-Yih Hsu
 
Flanges general-for-dummies
Flanges general-for-dummiesFlanges general-for-dummies
Flanges general-for-dummiesIvan Garcia
 
Ocaml internal (description of runtime system in Korean)
Ocaml internal (description of runtime system in Korean)Ocaml internal (description of runtime system in Korean)
Ocaml internal (description of runtime system in Korean)Hyungchul Park
 
Why no auto negotiation for fiber optic media?
Why no auto negotiation for fiber optic media?Why no auto negotiation for fiber optic media?
Why no auto negotiation for fiber optic media?MapYourTech
 
U-Boot Porting on New Hardware
U-Boot Porting on New HardwareU-Boot Porting on New Hardware
U-Boot Porting on New HardwareRuggedBoardGroup
 
Linux PCI device driver
Linux PCI device driverLinux PCI device driver
Linux PCI device driver艾鍗科技
 
The Microkernel Mach Under NeXTSTEP
The Microkernel Mach Under NeXTSTEPThe Microkernel Mach Under NeXTSTEP
The Microkernel Mach Under NeXTSTEPGregor Schmidt
 
BKK16-503 Undefined Behavior and Compiler Optimizations – Why Your Program St...
BKK16-503 Undefined Behavior and Compiler Optimizations – Why Your Program St...BKK16-503 Undefined Behavior and Compiler Optimizations – Why Your Program St...
BKK16-503 Undefined Behavior and Compiler Optimizations – Why Your Program St...Linaro
 
Page cache in Linux kernel
Page cache in Linux kernelPage cache in Linux kernel
Page cache in Linux kernelAdrian Huang
 
qemu + gdb: The efficient way to understand/debug Linux kernel code/data stru...
qemu + gdb: The efficient way to understand/debug Linux kernel code/data stru...qemu + gdb: The efficient way to understand/debug Linux kernel code/data stru...
qemu + gdb: The efficient way to understand/debug Linux kernel code/data stru...Adrian Huang
 
Uboot startup sequence
Uboot startup sequenceUboot startup sequence
Uboot startup sequenceHoucheng Lin
 
Project ACRN expose and pass through platform hidden PCIe devices to SOS
Project ACRN expose and pass through platform hidden PCIe devices to SOSProject ACRN expose and pass through platform hidden PCIe devices to SOS
Project ACRN expose and pass through platform hidden PCIe devices to SOSProject ACRN
 
Anatomy of the loadable kernel module (lkm)
Anatomy of the loadable kernel module (lkm)Anatomy of the loadable kernel module (lkm)
Anatomy of the loadable kernel module (lkm)Adrian Huang
 
Function Level Analysis of Linux NVMe Driver
Function Level Analysis of Linux NVMe DriverFunction Level Analysis of Linux NVMe Driver
Function Level Analysis of Linux NVMe Driver인구 강
 

Mais procurados (20)

Introduction to Khronos SYCL
Introduction to Khronos SYCLIntroduction to Khronos SYCL
Introduction to Khronos SYCL
 
Flanges general-for-dummies
Flanges general-for-dummiesFlanges general-for-dummies
Flanges general-for-dummies
 
API_510_for_Exam.pdf
API_510_for_Exam.pdfAPI_510_for_Exam.pdf
API_510_for_Exam.pdf
 
Ocaml internal (description of runtime system in Korean)
Ocaml internal (description of runtime system in Korean)Ocaml internal (description of runtime system in Korean)
Ocaml internal (description of runtime system in Korean)
 
Why no auto negotiation for fiber optic media?
Why no auto negotiation for fiber optic media?Why no auto negotiation for fiber optic media?
Why no auto negotiation for fiber optic media?
 
U-Boot Porting on New Hardware
U-Boot Porting on New HardwareU-Boot Porting on New Hardware
U-Boot Porting on New Hardware
 
Api 510-closed-2
Api 510-closed-2Api 510-closed-2
Api 510-closed-2
 
Linux PCI device driver
Linux PCI device driverLinux PCI device driver
Linux PCI device driver
 
The Microkernel Mach Under NeXTSTEP
The Microkernel Mach Under NeXTSTEPThe Microkernel Mach Under NeXTSTEP
The Microkernel Mach Under NeXTSTEP
 
BKK16-503 Undefined Behavior and Compiler Optimizations – Why Your Program St...
BKK16-503 Undefined Behavior and Compiler Optimizations – Why Your Program St...BKK16-503 Undefined Behavior and Compiler Optimizations – Why Your Program St...
BKK16-503 Undefined Behavior and Compiler Optimizations – Why Your Program St...
 
Boot process: BIOS vs UEFI
Boot process: BIOS vs UEFIBoot process: BIOS vs UEFI
Boot process: BIOS vs UEFI
 
Aula 4 dimensionamento
Aula 4   dimensionamentoAula 4   dimensionamento
Aula 4 dimensionamento
 
Page cache in Linux kernel
Page cache in Linux kernelPage cache in Linux kernel
Page cache in Linux kernel
 
Interrupts on xv6
Interrupts on xv6Interrupts on xv6
Interrupts on xv6
 
I2C Drivers
I2C DriversI2C Drivers
I2C Drivers
 
qemu + gdb: The efficient way to understand/debug Linux kernel code/data stru...
qemu + gdb: The efficient way to understand/debug Linux kernel code/data stru...qemu + gdb: The efficient way to understand/debug Linux kernel code/data stru...
qemu + gdb: The efficient way to understand/debug Linux kernel code/data stru...
 
Uboot startup sequence
Uboot startup sequenceUboot startup sequence
Uboot startup sequence
 
Project ACRN expose and pass through platform hidden PCIe devices to SOS
Project ACRN expose and pass through platform hidden PCIe devices to SOSProject ACRN expose and pass through platform hidden PCIe devices to SOS
Project ACRN expose and pass through platform hidden PCIe devices to SOS
 
Anatomy of the loadable kernel module (lkm)
Anatomy of the loadable kernel module (lkm)Anatomy of the loadable kernel module (lkm)
Anatomy of the loadable kernel module (lkm)
 
Function Level Analysis of Linux NVMe Driver
Function Level Analysis of Linux NVMe DriverFunction Level Analysis of Linux NVMe Driver
Function Level Analysis of Linux NVMe Driver
 

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

Monitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - NagiosMonitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - NagiosEduardo Legatti
 
Arquiteturas de referência MySQL
Arquiteturas de referência MySQLArquiteturas de referência MySQL
Arquiteturas de referência MySQLMySQL Brasil
 
Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n...
Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n...Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n...
Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n...iMasters
 
Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6MySQL Brasil
 
Forefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamenteForefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamenteUilson Souza
 
ClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpCampus Party Brasil
 
Os 10 Mandamentos para realizar um projeto de upgrade SAP
Os 10 Mandamentos para realizar um projeto de upgrade SAPOs 10 Mandamentos para realizar um projeto de upgrade SAP
Os 10 Mandamentos para realizar um projeto de upgrade SAPIssac Nolis Ohasi
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveiselliando dias
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctoolse-Setorial
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaAlexandre Tarifa
 
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)Wagner Bianchi
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 
Qcon 2013 - Walmart Frontend Solution using Node.js
Qcon 2013 - Walmart Frontend Solution using Node.jsQcon 2013 - Walmart Frontend Solution using Node.js
Qcon 2013 - Walmart Frontend Solution using Node.jsJorge Walendowsky
 
Cloud Mysql e MariaDB em alta performance
Cloud Mysql e MariaDB em alta performanceCloud Mysql e MariaDB em alta performance
Cloud Mysql e MariaDB em alta performanceSaveincloud
 
Aws sao paulo summit 2015 elasti cache avancado
Aws sao paulo summit 2015   elasti cache avancadoAws sao paulo summit 2015   elasti cache avancado
Aws sao paulo summit 2015 elasti cache avancadoAmazon Web Services LATAM
 
Introdução à computação na nuvem e Windows Azure
Introdução à computação na nuvem e Windows AzureIntrodução à computação na nuvem e Windows Azure
Introdução à computação na nuvem e Windows AzureGiovanni Bassi
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Marcos William Valentini
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Marcos William Valentini
 

Semelhante a Dicas para Turbinar o servidor de Aplicações JBoss 7 (20)

Monitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - NagiosMonitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - Nagios
 
Arquiteturas de referência MySQL
Arquiteturas de referência MySQLArquiteturas de referência MySQL
Arquiteturas de referência MySQL
 
Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n...
Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n...Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n...
Datawarehouse - Obtenha insights consistentes para o seu negócio: conheça o n...
 
DevTalk 08/2019
DevTalk 08/2019DevTalk 08/2019
DevTalk 08/2019
 
Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6Mais performance com o MySQL 5.6
Mais performance com o MySQL 5.6
 
Forefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamenteForefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamente
 
ClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs Php
 
Clusterização de Aplicações PHP
Clusterização de Aplicações PHPClusterização de Aplicações PHP
Clusterização de Aplicações PHP
 
Os 10 Mandamentos para realizar um projeto de upgrade SAP
Os 10 Mandamentos para realizar um projeto de upgrade SAPOs 10 Mandamentos para realizar um projeto de upgrade SAP
Os 10 Mandamentos para realizar um projeto de upgrade SAP
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveis
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctools
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Qcon 2013 - Walmart Frontend Solution using Node.js
Qcon 2013 - Walmart Frontend Solution using Node.jsQcon 2013 - Walmart Frontend Solution using Node.js
Qcon 2013 - Walmart Frontend Solution using Node.js
 
Cloud Mysql e MariaDB em alta performance
Cloud Mysql e MariaDB em alta performanceCloud Mysql e MariaDB em alta performance
Cloud Mysql e MariaDB em alta performance
 
Aws sao paulo summit 2015 elasti cache avancado
Aws sao paulo summit 2015   elasti cache avancadoAws sao paulo summit 2015   elasti cache avancado
Aws sao paulo summit 2015 elasti cache avancado
 
Introdução à computação na nuvem e Windows Azure
Introdução à computação na nuvem e Windows AzureIntrodução à computação na nuvem e Windows Azure
Introdução à computação na nuvem e Windows Azure
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
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
  • 2. Agenda • Tuning • Threading • Slimming • MSC - Modular Service Container • Logging • Datasource • Dicas
  • 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
  • 5. Slimming: Retirando serviços do JBoss AS Tempo de inicializaçã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.
  • 8. MSC - Modular Service Container
  • 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)
  • 13. DEMO
  • 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. 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. DEMO
  • 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
  • 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. 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