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>
<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.
·
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
-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:
http://www.mastertheboss.com/en/jboss-howto/47-jboss-jmx/92-jboss-monitor-snapshot.html
http://www.mastertheboss.com/en/jboss-howto/47-jboss-jmx/91-jboss-monitor.html
http://www.mastertheboss.com/en/jboss-howto/47-jboss-jmx/91-jboss-monitor.html
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>
<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