SlideShare uma empresa Scribd logo
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

Node JS Crash Course
Node JS Crash CourseNode JS Crash Course
Node JS Crash Course
Haim Michael
 
Golang basics for Java developers - Part 1
Golang basics for Java developers - Part 1Golang basics for Java developers - Part 1
Golang basics for Java developers - Part 1
Robert Stern
 
Understanding REST
Understanding RESTUnderstanding REST
Understanding REST
Nitin Pande
 
.Net Core
.Net Core.Net Core
.Net Core
Bertrand Le Roy
 
Spring framework core
Spring framework coreSpring framework core
Spring framework core
Taemon Piya-Lumyong
 
Creating Chatbots with Botman - English
Creating Chatbots with Botman - EnglishCreating Chatbots with Botman - English
Creating Chatbots with Botman - English
Laravel Poland MeetUp
 
Software architectural design patterns(MVC, MVP, MVVM, VIPER) for iOS
Software architectural design patterns(MVC, MVP, MVVM, VIPER) for iOSSoftware architectural design patterns(MVC, MVP, MVVM, VIPER) for iOS
Software architectural design patterns(MVC, MVP, MVVM, VIPER) for iOS
Jinkyu Kim
 
Web Worker, Service Worker and Worklets
Web Worker, Service Worker and WorkletsWeb Worker, Service Worker and Worklets
Web Worker, Service Worker and Worklets
Keshav Gupta
 
Java 17
Java 17Java 17
Java 17
Mutlu Okuducu
 
Introduction to .NET Core
Introduction to .NET CoreIntroduction to .NET Core
Introduction to .NET Core
Marco Parenzan
 
Applicazioni web based
Applicazioni web basedApplicazioni web based
Applicazioni web based
Marco Liverani
 
Django REST Framework
Django REST FrameworkDjango REST Framework
Django REST Framework
Load Impact
 
Its time to React.js
Its time to React.jsIts time to React.js
Its time to React.js
Ritesh Mehrotra
 
Svelte as a Reactive Web Framework
Svelte as a Reactive Web FrameworkSvelte as a Reactive Web Framework
Svelte as a Reactive Web Framework
University of Moratuwa, Katubedda, Sri Lanka
 
História da língua inglesa
História da língua inglesaHistória da língua inglesa
História da língua inglesa
Isabel Araujo
 
Euro notas+moedas
Euro notas+moedasEuro notas+moedas
Euro notas+moedas
Pelo Siro
 
Animais em inglês
Animais em inglêsAnimais em inglês
Animais em inglês
Rayan Gomes
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
Helder da Rocha
 
Redis
RedisRedis
Hands-On Java web passando por Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
Hands-On Java web passando por  Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...Hands-On Java web passando por  Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
Hands-On Java web passando por Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
Mario Jorge Pereira
 

Mais procurados (20)

Node JS Crash Course
Node JS Crash CourseNode JS Crash Course
Node JS Crash Course
 
Golang basics for Java developers - Part 1
Golang basics for Java developers - Part 1Golang basics for Java developers - Part 1
Golang basics for Java developers - Part 1
 
Understanding REST
Understanding RESTUnderstanding REST
Understanding REST
 
.Net Core
.Net Core.Net Core
.Net Core
 
Spring framework core
Spring framework coreSpring framework core
Spring framework core
 
Creating Chatbots with Botman - English
Creating Chatbots with Botman - EnglishCreating Chatbots with Botman - English
Creating Chatbots with Botman - English
 
Software architectural design patterns(MVC, MVP, MVVM, VIPER) for iOS
Software architectural design patterns(MVC, MVP, MVVM, VIPER) for iOSSoftware architectural design patterns(MVC, MVP, MVVM, VIPER) for iOS
Software architectural design patterns(MVC, MVP, MVVM, VIPER) for iOS
 
Web Worker, Service Worker and Worklets
Web Worker, Service Worker and WorkletsWeb Worker, Service Worker and Worklets
Web Worker, Service Worker and Worklets
 
Java 17
Java 17Java 17
Java 17
 
Introduction to .NET Core
Introduction to .NET CoreIntroduction to .NET Core
Introduction to .NET Core
 
Applicazioni web based
Applicazioni web basedApplicazioni web based
Applicazioni web based
 
Django REST Framework
Django REST FrameworkDjango REST Framework
Django REST Framework
 
Its time to React.js
Its time to React.jsIts time to React.js
Its time to React.js
 
Svelte as a Reactive Web Framework
Svelte as a Reactive Web FrameworkSvelte as a Reactive Web Framework
Svelte as a Reactive Web Framework
 
História da língua inglesa
História da língua inglesaHistória da língua inglesa
História da língua inglesa
 
Euro notas+moedas
Euro notas+moedasEuro notas+moedas
Euro notas+moedas
 
Animais em inglês
Animais em inglêsAnimais em inglês
Animais em inglês
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
Redis
RedisRedis
Redis
 
Hands-On Java web passando por Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
Hands-On Java web passando por  Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...Hands-On Java web passando por  Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
Hands-On Java web passando por Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
 

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 - Nagios
Eduardo Legatti
 
Arquiteturas de referência MySQL
Arquiteturas de referência MySQLArquiteturas de referência MySQL
Arquiteturas de referência MySQL
MySQL 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
 
DevTalk 08/2019
DevTalk 08/2019DevTalk 08/2019
DevTalk 08/2019
Leandro Silva
 
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
MySQL Brasil
 
Forefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamenteForefront TMG - Planejando corretamente
Forefront TMG - Planejando corretamente
Uilson Souza
 
Clusterização de Aplicações PHP
Clusterização de Aplicações PHPClusterização de Aplicações PHP
Clusterização de Aplicações PHP
ECRAYON Tecnologia Criativa
 
ClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs Php
Campus 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 SAP
Issac Nolis Ohasi
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveis
elliando 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 Ctools
e-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 escala
Alexandre 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 PHP
Felipe 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.js
Jorge 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 performance
Saveincloud
 
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
Amazon 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 Azure
Giovanni 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.0
Marcos 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.0
Marcos 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