quinta-feira, 22 de agosto de 2013

JBoss Begins


Balanceamento de Carga ( Cluster)
Cluster = Partição.   Nó = Instância
  Não é feito pelo Jboss, mas por quem o chama(Apache, IIS) - mod_jk.
                /etc/named.conf
Farmim Deployment: Deploy em um cluster.  Só copiar o arquivo empacotado (EAR, WAR, SAR) para o diretório all/farm que ele é copiado para os outros nós do cluster.


Replicação de sessão
No web.xml, inserir dentro do web-app: <distributable/> para dizer que a aplicação é distribuida.

No jboss-web.xml
<jboss-web>
    <replication-config>
        <replication-trigger>SET</replication-trigger>
        <replication-granularity>SESSION</replication-granularity> Replica a sessão inteira. 
ATTRIBUTE, replicaria os atributos que sofreram alteração.
    </replication-config>
</jboss-web>

 JMX

                JMX  é a tecnologia(API) que permite implementar “management interfaces” ou seja gerenciar aplicações Java.


Caixa de texto:












·         


Abstrai a o trabalho de gerencia de informação para uma interface comum para facilitar o gerenciamento integrado.
·         Distribui o gerenciamento movendo as funções de gerenciamento para os agentes.
·         Deploy real-time de serviços e modificações
·         Possibilidade de uso para gerenciar qualquer aplicação ou device ((via JNI or SNMP etc..)

Mbean Server
É o core do agente.  Ele provê um registo para os Mbeans.
Permite que os clientes descubram e executem operações expostar pelos Mbeans.
Disponibiliza vários serviços para facilitar a gerência (ex: monitoramento, escalonamento, etc)
Usa “ObjectName” class para registrar os objetos com o MBeanServer

Lida com os recursos como MBeans
suporte Mbean para “managed bean”
MBeans podem representar um device físico ou uma aplicação.
Usuário decide quais atributos e métodos ele deseja expor para gerenciamento.
Usa design patters similares aos JavaBeans
MBeans são expostos em um agente.

Standard Beans

É o Mbean mais simples
Prove uma representação estática de um recurso gerenciável.
Implementa uma interface gerenciada de atributos e métodos que um device ou aplicação expõe para gerencia.

Notifications
Podem ser usadas para informar aos listeners registrados eventos importantes ou mudanças de estado
Similar ao modelo de eventos do Java
Registra uma vez para todos os tipos de notificações
Pode fornecer um filtro para dizer quais notificações está interessado.

Mbeans Dinamicos
Bons se a management interface não está estável.
A management interface é definida runtime.
Desenvolvedor é responsável por checar a validade das invocações

DynamicMBean Interface
<<Interface>>
DynamicMBean
getAttribute(String attribute)
setAttribute(Attribute attribute)
getAttributes (String[] attributes)
setAttributes(AttibuteList attributes)
getMBeanInfo()
invoke(String actionName, Object[] params)

Modelo MBeans
Mais flexível e com isso Mbeans mais complicados.
Extensão para o  Mbean dinamico
Desenvolvedores não escrevem um classe MBean
O agente deve fornecer o RequiredModelMBean e o Management Interface é definido fora do Bean via metodos setter.
Features inclui: Persistence, logging, and attribute caching.

Conectores/Adapters
Um conector faz um (JMX) API MBean server acessivel para os clientes Java remoto
Adapters são similares aos connectors exceto porque eles provêm protocol translations (I.e. SNMP, HTML, etc.)

Agent Services
Mlet;  (Management Applet) Adiciona dinamicamente arquivos de classes para o server tanto para uma localização local quanto remota.
Relation Service;  Permite a definição de relacionamentos entre MBeans
Monitors:  Observa os atributos MBean e emite notificações quando os valores mudam.
Timers:  Emitem notificações definidas pelo usuário em um determinado momento.

JMX Remote API
Adiciona capacidade remota para a especificação JMX
Faz o agente JMX acessível fora da JVM.
Suporte padrão via RMI
Suporte opcional via TCP Sockets (JMXMP)
Suporta serviços de discovery/lookup e define segurança entre cliente e servidor
Assim como com código RMI, deve lidar com exceções de comunicação

J2EE Management
Um MBean pode obter dado diretamente de um EJB invocando os seus métodos de acesso.
Um MBean pode receber dado de um EJB.
Registro e remoção de um MBean com um agente JMX, sobre a criação e destruição de um EJB

Managed Bean - Mbean
Só possui um microkernel baseado no JMX(Java Management Extension).  Todo componente é um component JMX ou
  Mbean.  O JMX permite o mapeamento dos componentes a partir do nome.
Especificações de interface que executam um método com um parametro string.
META-INF/jboss-service.xml – SAR
Mbean é registrado e usado por um MbeanServer que consiga ler uma “management interface”

 1.1.1.2 Tuning Jboss

Tips 1: Tune the garbage collection             http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html
Tip 2: Set -Xms and -Xmx to the same value:  Isso aumenta a previsibilidade removendo parte das decisões por tamanho da jvm.
Tip 3: Use server VM: Melhor para aplicações que rodam por longo período.  Para habilitar isso : -server no cmd.
tip 4:  Turn off distributed gc: Distributed gc, muito usado em sistemas RMI. O servidor segue quais clientes remotos fizeram requests a objetos remotos do servidor.  Dirt: Quando a referência é feia.  Clean: Quando libera a referência.  Roda a cada minuto e é dispendioso.
                    Set it to run every 30 minute at least
                    -Dsun.rmi.dgc.client.gcInterval=1800000
                    -Dsun.rmi.dgc.server.gcInterval=1800000
Tip 5:  Turn on parallel gc: Bom para rodar o gc com multiplas threads em multiplos processos.  Geralmente roda o gc em uma thread por processador.  -XX:ParallelGCThreads=8.   8 threads para cada processador.
Tip 6: Don't use Huge heaps, use a cluster: Ao invés de aumentar o tamanho do head, crie novos nós do Jboss cluster e faça o balanceamento entre eles.
Tip 7: Don't choose an heap larger then 70% of your OS memory: Para evitar excessivo page faults e trashing.
Tip 8:  Tune the Heap ratio: Especifica o tamanho do heap particionado entre o young e o tenured space do heap.  -XX:NewRatio=3, significa que a proporção, young/tenured é de 1:3 (ideal), porem é bom ver as estatísticas do gc..
Tip 9:  Monitor the free memory with monitors and snapshots:
Tip 10: Tune the Operating System: Parâmetros de TCP, socket connection, file-max( no linux, já que tudo é arquivo no linux), aumentar o MTU, usar páginas de memória maiores.
Tip 11: Lots of Requests ? check JBoss thread pool: Definido no conf/jboss-service.
                    <mbean code="org.jboss.util.threadpool.BasicThreadPool"  
1.    name="jboss.system:service=ThreadPool">  
2.    <attribute name="Name">JBoss System Threads</attribute>  
3.    <attribute name="ThreadGroupName">System Threads</attribute>  
4.    <attribute name="KeepAliveTime">60000</attribute>  
5.    <attribute name="MaximumPoolSize">10</attribute>  
6.    <attribute name="MaximumQueueSize">1000</attribute>  
7.    <attribute name="BlockingMode">run</attribute>  
8. </mbean>  
                Geralmente isso funciona bem, mas para muitas invocações(ex: EJB) é bom monitorar o pool.  No Web Console veja o jboss.system:service=ThreadPool e veja o Queuesize se QueueSize ~= MaximumPoolSize, aumentar o MaximumPoolSize.  Se também usa conexão JDBC, também aumente o pool do JDBC.
Tip 12: Check the Embedded web container: Jboss suporta Http, https, ajp.  No server.xml, que fica na raiz da aplicação.  Olha no MBean jboss.web:name=http-127.0.0.1-8080,type=ThreadPool. CurrentThreadsBusy, se tiver mais de 70%, então aumente o maxThreads e também o “Thread Pool”(tip 11)

                    <Connector port="8080" address="${jboss.bind.address}"      
1.      maxThreads="250" maxHttpHeaderSize="8192"   // Num max de thread para atender clientes HTTP.  Ou seja o número de usuários concorrentes a acessar a aplicação.
2.      emptySessionPath="true" protocol="HTTP/1.1"  
3.      enableLookups="false" redirectPort="8443" acceptCount="100"   //Numero de request threads que são colocadas na fila de requests quando todas as threads estão sendo usadas.  Se isso ultrapassar, dá um timeout.
4.      connectionTimeout="20000" disableUploadTimeout="true" 
5. compression=”force”/>  //O Jboss comprime a resposta e envia para o browser, o browser extrai e mostra a página.  Isso pode diminuir a banda gasta nas requisições.
Tip 13:  Turn off JSP Compilation in production: O Jboss regularmente checa se o JSP necessita ser recompilado antes da execução do JSP.  Em produção isso não é necessário.
web.xml em deploy/jboss-web.deployer/conf . 

                                         <init-param>
                                                     <param-name>development</param-name>
                                                     <param-value>false</param-value>
                                         </init-param>
                                         <init-param>
                                                     <param-name>checkInterval</param-name>
                                                     <param-value>300</param-value>
                                         </init-param> 

Nenhum comentário:

Postar um comentário