Upload
luan-cestari
View
298
Download
0
Embed Size (px)
DESCRIPTION
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
Citation preview
http://slidesha.re/ZNZvg4 @BR_LuanCestari
Tunning JVMDos Comandos às
configurações
JSummit 2014 SP - Luan Cestari
http://slidesha.re/ZNZvg4 @BR_LuanCestari
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
Introdução | Batepapo
http://slidesha.re/ZNZvg4 @BR_LuanCestari
O que veremos
● Overview sobre desempenho● Comandos para troubleshooting e
desempenho● Hints de desempenho
http://slidesha.re/ZNZvg4 @BR_LuanCestari
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
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
Desempenho
● Menor Tempo de resposta / Latência● Maior Volume de dados processados /
Throughput
http://slidesha.re/ZNZvg4 @BR_LuanCestari
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
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
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
Arquitetura de memória OpenJDK
Metaspace
http://slidesha.re/ZNZvg4 @BR_LuanCestari
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
Tunning e Profiling
● Top-Down / Bottom-Up
http://slidesha.re/ZNZvg4 @BR_LuanCestari
Tunning e Profiling| Bottom-up
http://slidesha.re/ZNZvg4 @BR_LuanCestari
Tunning e Profiling| Bottom-up
http://slidesha.re/ZNZvg4 @BR_LuanCestari
Tunning e Profiling| Bottom-up
http://slidesha.re/ZNZvg4 @BR_LuanCestari
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 )
■ 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
http://slidesha.re/ZNZvg4 @BR_LuanCestari
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
Demo
● Cruzem os dedos =)
http://slidesha.re/ZNZvg4 @BR_LuanCestari
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
Muito Obrigado!
http://slidesha.re/ZNZvg4 @BR_LuanCestari
Dúvidas?
http://slidesha.re/1kQU0Yg@BR_LuanCestari