Tunning da jvm dos comandos às configurações

22
http://slidesha.re/ZNZvg4 @BR_LuanCestari Tunning JVM Dos Comandos às configurações JSummit 2014 SP - Luan Cestari

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

Transcript of Tunning da jvm dos comandos às configurações

Page 1: Tunning da jvm  dos comandos às configurações

http://slidesha.re/ZNZvg4 @BR_LuanCestari

Tunning JVMDos Comandos às

configurações

JSummit 2014 SP - Luan Cestari

Page 2: Tunning da jvm  dos comandos às configurações

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.

Page 3: Tunning da jvm  dos comandos às configurações

http://slidesha.re/ZNZvg4 @BR_LuanCestari

Introdução | Batepapo

Page 4: Tunning da jvm  dos comandos às configurações

http://slidesha.re/ZNZvg4 @BR_LuanCestari

O que veremos

● Overview sobre desempenho● Comandos para troubleshooting e

desempenho● Hints de desempenho

Page 5: Tunning da jvm  dos comandos às configurações

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 =)

Page 6: Tunning da jvm  dos comandos às configurações

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

Page 7: Tunning da jvm  dos comandos às configurações

http://slidesha.re/ZNZvg4 @BR_LuanCestari

Desempenho

● Menor Tempo de resposta / Latência● Maior Volume de dados processados /

Throughput

Page 8: Tunning da jvm  dos comandos às configurações

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

Page 9: Tunning da jvm  dos comandos às configurações

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)

Page 10: Tunning da jvm  dos comandos às configurações

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

Page 11: Tunning da jvm  dos comandos às configurações

http://slidesha.re/ZNZvg4 @BR_LuanCestari

Arquitetura de memória OpenJDK

Metaspace

Page 12: Tunning da jvm  dos comandos às configurações

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)

Page 13: Tunning da jvm  dos comandos às configurações

http://slidesha.re/ZNZvg4 @BR_LuanCestari

Tunning e Profiling

● Top-Down / Bottom-Up

Page 14: Tunning da jvm  dos comandos às configurações

http://slidesha.re/ZNZvg4 @BR_LuanCestari

Tunning e Profiling| Bottom-up

Page 15: Tunning da jvm  dos comandos às configurações

http://slidesha.re/ZNZvg4 @BR_LuanCestari

Tunning e Profiling| Bottom-up

Page 16: Tunning da jvm  dos comandos às configurações

http://slidesha.re/ZNZvg4 @BR_LuanCestari

Tunning e Profiling| Bottom-up

Page 17: Tunning da jvm  dos comandos às configurações

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

Page 18: Tunning da jvm  dos comandos às configurações

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

Page 19: Tunning da jvm  dos comandos às configurações

http://slidesha.re/ZNZvg4 @BR_LuanCestari

Demo

● Cruzem os dedos =)

Page 20: Tunning da jvm  dos comandos às configurações

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

Page 21: Tunning da jvm  dos comandos às configurações

http://slidesha.re/ZNZvg4 @BR_LuanCestari

Muito Obrigado!

Page 22: Tunning da jvm  dos comandos às configurações

http://slidesha.re/ZNZvg4 @BR_LuanCestari

Dúvidas?

http://slidesha.re/1kQU0Yg@BR_LuanCestari