Performance Java
Flávia Falcão
| [email protected]
Roteiro
•
•
•
•
•
•
•
Motivação
Objetivos
Garbage Collection
Parser
Codificação Java
Conclusao
Referencias
Motivação
•
Web está em todo lugar :
–
–
–
–
•
E-marketplaces
E-comerce B2B automatizado
Interegracao de processos de negocio na web
Compartilahamento de recursos , computacao distribuida
Necessidade de plataforma que permita interações aplicação-a-aplicação sistemática na web :
–
FOCO Tecnologia web services, escopo é o projeto CENAS
Problema : A performance dessas aplicações
Objetivos
•
•
Identificar os fatores que influenciam o desempenho das aplicações j2ee e
web services
• JVM Tunning
• XML Parser
Boas práticas para codificação de aplicações em JAVA, com ênfase em
WebServices
Garbage Collection
•
A performance de uma aplicação está intimamente ligada ao custo da
alocação e desalocação de memória. Se uma aplicação usa uma quantidade
de memória tal que força o sistema operacional a usar memória virtual, esta
aplicação sofrerá um impacto na performance
Tempo de Vida dos Objetos
•
A maioria dos objetos tem um curto tempo de vida:
– 80-98% dos objetos alocados morrem em menos de poucos milhões de instruções.
– 80-98% dos objetos alocados morrem antes de outro megabyte ter sido alocado.
•
•
Isto tem grande impacto da escolha do algoritmo de Garbage Collection
Definir o perfil de execução de uma aplicação, Isso é difícil !!!
Generacional GC
•
Divide a heap em múltiplas áreas ( gerações)
–
–
–
–
Objetos segregados por idade
Objetos novos morrem mais frequentemente,GC mais freqüente
Em Gerações mais velhas as coletas são menos freqüentes
Diferentes gerações usam diferentes algoritmos
Fatores que afetam o GC
•
•
Taxa de objetos criados
Vida dos objetos
– Temporários,intermediários,longos
•
Tipo do objeto
– Tamanho, complexidade
•
Relacionamento entre objetos
– Dificuldade de determinar e traçar as referencias dos objetos
Atividades Realizadas
•
Analisar os principais algoritmos geracionais do garbage Collection da jvm
1.4.2
–
–
–
–
–
•
Copyng GC
Mark sweep GC
Parallel GC
Concurrent mark sweep GC
Incremental GC
Mecanismos disponiveis para otimizar seu desempenho
– Analise do comportamento da Heap da jvm
Maquina Virtual JAVA
•
•
A HotSpot VM otimiza o gerenciamento de memória por idades
(generational).
O heap da maquina virtual é dividida em young generation e old gereration e
permanent generation de acordo com a idade do objeto
Maquina Virtual JAVA
•
•
Na Young generation estão os objetos considerados com tempo de curto
relativo a um intervalo de coletas.
A young generation é dividida em 3 espacos :
– um eden
– dois espaços “Survivor”(to-space e from-space).
– As alocações acontecem do eden para o from-space.Quando estes estão preenchidos
a coleta na Young generation é feita.
– Geralmente a young generation é muito menor em relação ao tamanho da heap.Isto
leva a pequenas mas freqüentes pausas na young generation durante a execução do
garbage collection.
Maquina Virtual JAVA
•
•
•
Objetos que sobreviventes a um determinado numero de coletas são
movidos(promovidos) para a old generation.
A old generation é geralmente maior em relação a Young o que leva a
pausas maiores e menos freqüentes .
A permanent generation é usada para armazenar classes de objetos e meta
dados relacionados.
Maquina Virtual JAVA
Maquina Virtual JAVA
•
Parâmetros da JVM
•
•
•
-XX:NewSize
-XX:MaxNewSize
-XX:SurvivorRatio
•
Automaticamente
– XX:+UseAdaptativeSize
Maquina Virtual JAVA
•
Como exemplo, para uma Yung generation com 128Mb, Eden de 64Mb, SemiSpace 32MB, Os parametros devem ser
java -Xms512m -Xmx512m \
-XX:NewSize=128m -XX:MaxNewSize=128m \
-XX:SurvivorRatio=2 application
Maquina Virtual JAVA
A otimização da utilização destas áreas juntamente com a escolha correta do
algorítimo do garbage collector pode gerar um aumento de performance
considerável
Maquina Virtual JAVA
•
Nas J2Ses o algoritmo default da Young generation é o copyng collector já na
old generation o algoritmo padrão é o mark-compact collector.
Maquina Virtual JAVA
Algorítimos
•
Parallel Collector que é implementado na young generation.Este Coletor usa a
versão paralela da young generation coletor.(copyng colector). Deve ser usado
quando se deseja melhorar o desempenho da aplicação em maquinas com
vários processadores.
– -XX:+UseParNewGC , -XX:+UseParallelGC, - XX:ParallelGCThreads=n
Maquina Virtual JAVA
Algorítimos
•
Concurrent mark sweep Collector é implementado na old generation.Tenta
minimizar as pausas fazendo a maioria da coleta simultaneamente com as
threads da aplicação .
– -XX :UseConcMarkSweepGC
Cases
1
Cases
•
•
Teste com a aplicação J2EE PetStore
Desafios
– Analisar o comportamento dos algorítimos e mensurar a performance deles em
maquinas multiprocessadas
– Realizar um estudo sobre dimensionamento do HEAP
Requisições Respondidas
Cases
16000
14000
12000
Default
10000
8000
NewParGC
6000
ParallelGC
4000
ConcMarkSweep
2000
0
1
2
4
6
8
10
12
14
Numero de Usuarios
16
18
20
Cases
16000
14000
10000
8000
requests
6000
16000
4000
14000
2000
12000
0
10000
8000
2
Requests
3
4
5
8
newSurvivor
6000
4000
2000
16000
0
14000
2
3
4
5
New Ratio
8
14
20
Requisicoes
Requisicoes
requisicoes
12000
12000
10000
8000
Requests
6000
4000
2000
0
2
3
4
5
New Ratio
8
14
20
Cases
2
Cases
•
•
Testes na aplicação portal consul
Desafios
– Realizar testes na aplicação do desenvolvida pelo CESAR analisando
• Variação do servidor de aplicação
• Variação da JVM
• Utilização de macanismos de cache
Cases
Requisições atendidas
Requisições atendidas x Versão da JVM
40
35
30
25
20
15
10
5
0
JVM 1.3
JVM 1.4
5
10
15
20
25
Número de usuários
30
35
Cases
Websphere 4.0
Tomcat
15
25
40
35
30
25
20
15
10
5
0
5
10
20
30
35
Cases
websphere 4.0
Tomcat sem alteração
Tomcat + Cache
350
Requests/seg
300
250
200
150
100
50
0
5
10
15
20
25
Usuários simultâneos
30
35
Cases
3
Cases
•
•
Testes na aplicação da Meantime para a globo.com
Desafios
– A aplicação deveria ser capaz de atender 350.000 requisições em 1 hora (97.2
req/seg)
– A equipe do projeot partiu das premissas:
• Popar o SGBD ($$$$$)
• Maximizar Cache 
Cases
Users
Requests/Seg
10 USERS 10 MINUTOS
20 USERS 10 MINUTOS
20 USERS 1 HORA 2/3 VOTIND 1/3 SYNC
20 USERS 1 HORA VOTING
108.13
141.31
115.05
118.64
Case
Web services : Problemas
•
•
XML é o coração da tecnologia web services.
Problemas :
–
–
–
–
–
Tamanho dos arquivos xml
Marshalling e un-marshaling
Tipo de dado
Transmissao de mensagens SOAP
Validação
Marshalling e Un-marshaling :
Parser XML
•
O tempo de conversão de documentos XML durante o processo de
comunicação, pode significar um grande gargalo no sistema quando se refere
à performance do envio e recebimento de um serviço.
Case
•
•
Testes realizados com Parsers Xml/Java de diferentes fabricantes.
Desafios:
– Realizar testes em aplicação analisando o comportamento de cada um dos parsers
– Mensurar e comparar o desempenho deles
Case
Codificação Java
•
•
A maneira com que se escreve um código pode ter um impacto no
desempenho de um sistema.
Inúmeros partes similares de código podem ter desempenhos radicalmente
diferentes.. Como os que seguem…
Exemplos (1)
•
Concatenação de strings
String str = “teste” + “já” + “va”;
internamente é :
String str = new StringBuffer().append(“teste”).append(“ja”).append(“va”)..toString();
JSP
Servlets
Web Services
Referencias
Perguntas?
Download

Case