Já ficou em dúvida porque o Java você tem que compilar e mesmo assim ele não gera código nativo? Sabia que não existe somente uma implementação de JVM? Gostaria de saber como funciona alguns comportamentos internos que a JVM executa por abaixo dos panos enquanto compila/roda seu código? Se você respondeu um sim para essa palestra ou se você está curioso em saber o que mais sobre o assunto, venha asistir essa palestra. Vamos ver isso e muito muitos detalhes de tuning que você pode fazer e até analisar sua aplicação java.
https://docs.google.com/presentation/d/1v-uK-PHQKaPC6-zxuau2UHoOjvpe9hjA
Latinoware 2013 - OpenStack RDO - A walkthrough by the Open Source Cloud Comp...
Tuning JVM performance
1. Tunning JVM
Dos Comandos às
configurações
JSummit 2014 SP - Luan Cestari
http://slidesha.re/ZNZvg4 @BR_LuanCestari
2. Ressalva/Disclaimer
● ESTA APRESENTAÇÃO REFLETE A OPINIÕES E
PROPOSTAS PESSOAIS DO AUTOR SOBRE O
TEMA, PODENDO NÃO REFLETIR
NECESSARIAMENTE A OPINIÂO / PONTO DE VISTA
DE QUAISQUER ORGANIZAÇÃO/EMPRESA LIGA OU
NÃO COM O AUTOR
● THIS PRESENTATION REFLECTS AUTHOR'S
PERSONAL OPINIONS AND IDEAS ON THE TOPIC
AND MAY NOT REFLECT NECESSARILY THE
OPINION/ VIEWPOINT OF ANY ORGANIZATION /
COMPANY WITH/WITHOUT RELATIONSHIP WITH
THE AUTHOR.
http://slidesha.re/ZNZvg4 @BR_LuanCestari
4. O que veremos
● Overview sobre desempenho
● Comandos para troubleshooting e
desempenho
● Hints de desempenho
http://slidesha.re/ZNZvg4 @BR_LuanCestari
5. O que NÃO veremos (infelizmente)
● Um workshop com hands on por causa do
tempo =(
○ Mas vou deixar slides online e podem me contactar
para conversamos =)
http://slidesha.re/ZNZvg4 @BR_LuanCestari
6. Vamos falar de OpenJDK
● JVM open source usada por outras JVMs
○ Veja também:
■ JCP (Java Community Process)
■ JSR (Java Specification Requests)
■ JEP (JDK Enhancement Proposals)
■ JUGs (comunidades) como SouJava
■ Eventos, Meetups e afins
http://slidesha.re/ZNZvg4 @BR_LuanCestari
7. Desempenho
● Menor Tempo de resposta / Latência
● Maior Volume de dados processados /
Throughput
http://slidesha.re/ZNZvg4 @BR_LuanCestari
8. Desempenho | Latência
● Latência baixa significa que as threads da
sua aplicação estarão sempre disponíveis e
não paradas por causa de alguma
manutenção da própria JVM. Com isso sua
aplicação respondera rápido sempre
● Exemplo
○ Aplicacoes de acoes (High frequency trading)
○ Streaming de dados (video conferencia)
○ Aplicacoes de tempo real (Aparelho no aviao)
○ Otimizacao de uma aplicacao web atingir um baixo
tempo de resposta para agradar o usuario
http://slidesha.re/ZNZvg4 @BR_LuanCestari
9. Desempenho | Throughput
● O outro caso é o Throughput, onde as
threads podem variar entre estarem
processando informações ou fazendo
manutenções na própria JVM (como GC)
● Exemplo
○ Processos em Batch
○ Aplicações web de não tempo real ou com requisitos
não-funcionais relacionados a latências simples
○ Backend (com a mesma ressalva anterior)
http://slidesha.re/ZNZvg4 @BR_LuanCestari
10. Desempenho | Como medir?
● Tempo de resposta do cliente
● Logs
○ Erros de memória
■ OutOfMemoryError, Leaks, GC, crash
○ Uso de recursos
■ CPU, Disco, Rede, Banco de dados, etc
● Também temos outra saída: As ferramentas
quem vem com o JDK
http://slidesha.re/ZNZvg4 @BR_LuanCestari
12. Tuning de GC e etc | Parâmetros da JVM
● Visto na outra palestra sobre GC
● Ajuste no tamanho, promocao, heuristica da
Heap
○ Young (Eden and Survival spaces) and Old
■ Parallel,CMS,G1 Collectors
○ -XX:MaxMetaspaceSize tamanho do Metaspace
● Thread stack
○ -xss para mudar
● Outras
○ LargePages (-XX:LargePageSizeInBytes=4m )
○ Muito mais http://jvm-options.tech.xebia.fr/? (lock,
cache,etc)
http://slidesha.re/ZNZvg4 @BR_LuanCestari
13. Tunning e Profiling
● Top-Down / Bottom-Up
http://slidesha.re/ZNZvg4 @BR_LuanCestari
17. Tunning e Profiling| Top-Down
● Mesma análise das versões anteriores
○ Uso do jvisualvm / jconsole para análise
○ Uso das memórias
■ GC Log (usando -verbosegc -XX:PrintGCDetails
http://slidesha.re/ZNZvg4 @BR_LuanCestari
)
■ Frequência e tempo de GC
■ Algoritmo de GC
○ Demais opções JVM
○ Thread Dump (jstack)
○ Heap Dump (jmap -dump ...)
○ Etc
○ Para profiling usam JVMTI (old JVMPI e JVMDI) e
JDI (alem de outras) e Graal
18. Tunning e Profiling| Top-Down
● Codigo
○ JVM consegue melhorar, ex
■ String ex = a + b
■ vira -> String ex = new StringBuilder().append(a).
append(b).toString();
○ Mas nem tudo
■ String ex2 = a.concat(b);
○ Collections muito grandes vs Arrays
■ Exemplo mil inteiros:
■ ArrayList<Integer> vs int[]~20k vs 4k
○ Cache
○ Regular Expression
http://slidesha.re/ZNZvg4 @BR_LuanCestari
19. Demo
● Cruzem os dedos =)
http://slidesha.re/ZNZvg4 @BR_LuanCestari
20. Futuro
● Twitter, Azul e Google ferramentas de
profiling
○ Baixíssimo uso de CPU e memory footprint
○ Triggers
○ Sample e contínuo
○ etc
http://slidesha.re/ZNZvg4 @BR_LuanCestari