SlideShare a Scribd company logo
1 of 22
Download to read offline
Tunning JVM 
Dos 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 
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
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 
http://slidesha.re/ZNZvg4 @BR_LuanCestari

More Related Content

What's hot

Técnicas de frontend para aplicações django - PythonBrasil[9]
Técnicas de frontend para aplicações django  - PythonBrasil[9]Técnicas de frontend para aplicações django  - PythonBrasil[9]
Técnicas de frontend para aplicações django - PythonBrasil[9]Rael Max
 
Primeiros passos para estruturar uma equipe front-end
Primeiros passos para estruturar uma equipe front-endPrimeiros passos para estruturar uma equipe front-end
Primeiros passos para estruturar uma equipe front-endDiego Eis
 
O novo ASP.NET - GDG-SP - Outubro/2016
O novo ASP.NET - GDG-SP - Outubro/2016O novo ASP.NET - GDG-SP - Outubro/2016
O novo ASP.NET - GDG-SP - Outubro/2016Renato Groff
 
Novidades do Visual Studio 2017 - .NET São Paulo - Maio/2017
Novidades do Visual Studio 2017 - .NET São Paulo - Maio/2017Novidades do Visual Studio 2017 - .NET São Paulo - Maio/2017
Novidades do Visual Studio 2017 - .NET São Paulo - Maio/2017Renato Groff
 
Os cuidados e os limites do Responsive Web Design
Os cuidados e os limites do Responsive Web DesignOs cuidados e os limites do Responsive Web Design
Os cuidados e os limites do Responsive Web DesignDiego Eis
 
Palestra Sobre o que é um Front-End
Palestra Sobre o que é um Front-EndPalestra Sobre o que é um Front-End
Palestra Sobre o que é um Front-EndLuis Fernando Mangia
 
Visão Geral do HTML5 e do Internet Explorer 9
Visão Geral do HTML5 e do Internet Explorer 9Visão Geral do HTML5 e do Internet Explorer 9
Visão Geral do HTML5 e do Internet Explorer 9Rodrigo Kono
 
O novo ASP.NET - PUC Developers Day - 2016
O novo ASP.NET - PUC Developers Day - 2016O novo ASP.NET - PUC Developers Day - 2016
O novo ASP.NET - PUC Developers Day - 2016Renato Groff
 
O novo ASP.NET - dotnetConf.Local 2016 - Santos-SP
O novo ASP.NET - dotnetConf.Local 2016 - Santos-SPO novo ASP.NET - dotnetConf.Local 2016 - Santos-SP
O novo ASP.NET - dotnetConf.Local 2016 - Santos-SPRenato Groff
 
OpenAM - Fast SSO
OpenAM - Fast SSOOpenAM - Fast SSO
OpenAM - Fast SSOYros
 
Canal Coding Night - Sua primeira aplicação com Blazor
Canal Coding Night - Sua primeira aplicação com BlazorCanal Coding Night - Sua primeira aplicação com Blazor
Canal Coding Night - Sua primeira aplicação com BlazorGustavo Bellini Bigardi
 
Guia do Front-end das Galáxias
Guia do Front-end das GaláxiasGuia do Front-end das Galáxias
Guia do Front-end das GaláxiasDavidson Fellipe
 
Master App - Porque menos é mais!
Master App - Porque menos é mais!Master App - Porque menos é mais!
Master App - Porque menos é mais!Rodrigo Serradura
 

What's hot (20)

Técnicas de frontend para aplicações django - PythonBrasil[9]
Técnicas de frontend para aplicações django  - PythonBrasil[9]Técnicas de frontend para aplicações django  - PythonBrasil[9]
Técnicas de frontend para aplicações django - PythonBrasil[9]
 
Primeiros passos para estruturar uma equipe front-end
Primeiros passos para estruturar uma equipe front-endPrimeiros passos para estruturar uma equipe front-end
Primeiros passos para estruturar uma equipe front-end
 
PostgreSQL Wonderland TDC-SP 2015
PostgreSQL Wonderland TDC-SP 2015PostgreSQL Wonderland TDC-SP 2015
PostgreSQL Wonderland TDC-SP 2015
 
O novo ASP.NET - GDG-SP - Outubro/2016
O novo ASP.NET - GDG-SP - Outubro/2016O novo ASP.NET - GDG-SP - Outubro/2016
O novo ASP.NET - GDG-SP - Outubro/2016
 
Novidades do Visual Studio 2017 - .NET São Paulo - Maio/2017
Novidades do Visual Studio 2017 - .NET São Paulo - Maio/2017Novidades do Visual Studio 2017 - .NET São Paulo - Maio/2017
Novidades do Visual Studio 2017 - .NET São Paulo - Maio/2017
 
Os cuidados e os limites do Responsive Web Design
Os cuidados e os limites do Responsive Web DesignOs cuidados e os limites do Responsive Web Design
Os cuidados e os limites do Responsive Web Design
 
Webforms2
Webforms2Webforms2
Webforms2
 
Melhor que o Google
Melhor que o GoogleMelhor que o Google
Melhor que o Google
 
Palestra Sobre o que é um Front-End
Palestra Sobre o que é um Front-EndPalestra Sobre o que é um Front-End
Palestra Sobre o que é um Front-End
 
Visão Geral do HTML5 e do Internet Explorer 9
Visão Geral do HTML5 e do Internet Explorer 9Visão Geral do HTML5 e do Internet Explorer 9
Visão Geral do HTML5 e do Internet Explorer 9
 
JavaScript Moderno
JavaScript ModernoJavaScript Moderno
JavaScript Moderno
 
Engarrafei
EngarrafeiEngarrafei
Engarrafei
 
O novo ASP.NET - PUC Developers Day - 2016
O novo ASP.NET - PUC Developers Day - 2016O novo ASP.NET - PUC Developers Day - 2016
O novo ASP.NET - PUC Developers Day - 2016
 
O novo ASP.NET - dotnetConf.Local 2016 - Santos-SP
O novo ASP.NET - dotnetConf.Local 2016 - Santos-SPO novo ASP.NET - dotnetConf.Local 2016 - Santos-SP
O novo ASP.NET - dotnetConf.Local 2016 - Santos-SP
 
OpenAM - Fast SSO
OpenAM - Fast SSOOpenAM - Fast SSO
OpenAM - Fast SSO
 
ASP.NET MVC 3
ASP.NET MVC 3ASP.NET MVC 3
ASP.NET MVC 3
 
Como é ser uma Front-end em 2018
Como é ser uma Front-end em 2018Como é ser uma Front-end em 2018
Como é ser uma Front-end em 2018
 
Canal Coding Night - Sua primeira aplicação com Blazor
Canal Coding Night - Sua primeira aplicação com BlazorCanal Coding Night - Sua primeira aplicação com Blazor
Canal Coding Night - Sua primeira aplicação com Blazor
 
Guia do Front-end das Galáxias
Guia do Front-end das GaláxiasGuia do Front-end das Galáxias
Guia do Front-end das Galáxias
 
Master App - Porque menos é mais!
Master App - Porque menos é mais!Master App - Porque menos é mais!
Master App - Porque menos é mais!
 

Similar to Tuning JVM performance

Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021
Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021
Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021Mauricio Bitencourt, CBPP
 
Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017Renato Groff
 
Criando o mvp (minimum viable product)
Criando o mvp (minimum viable product)Criando o mvp (minimum viable product)
Criando o mvp (minimum viable product)Daniel Campos
 
Visao geralti netshoes03
Visao geralti netshoes03Visao geralti netshoes03
Visao geralti netshoes03Ale Uehara
 
[GUTS-RS] Evento julho 2017 - Como iniciar os testes de performance em uma a...
[GUTS-RS] Evento julho 2017 -  Como iniciar os testes de performance em uma a...[GUTS-RS] Evento julho 2017 -  Como iniciar os testes de performance em uma a...
[GUTS-RS] Evento julho 2017 - Como iniciar os testes de performance em uma a...GUTS-RS
 
O que move a web atualmente?
O que move a web atualmente?O que move a web atualmente?
O que move a web atualmente?Fabio Janiszevski
 
1º Meetup Zabbix Meetup do Recife: Aécio Pires - Gerenciando Zabbix com o Sal...
1º Meetup Zabbix Meetup do Recife: Aécio Pires - Gerenciando Zabbix com o Sal...1º Meetup Zabbix Meetup do Recife: Aécio Pires - Gerenciando Zabbix com o Sal...
1º Meetup Zabbix Meetup do Recife: Aécio Pires - Gerenciando Zabbix com o Sal...Zabbix BR
 
Gerenciando o Zabbix com o SaltStack
Gerenciando o Zabbix com o SaltStackGerenciando o Zabbix com o SaltStack
Gerenciando o Zabbix com o SaltStackAécio Pires
 
Gerenciando o Zabbix com o SaltStack
Gerenciando o Zabbix com o SaltStackGerenciando o Zabbix com o SaltStack
Gerenciando o Zabbix com o SaltStackAécio Pires
 
DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra ...
DNAD 2015  - Como a arquitetura emergente de sua aplicação pode jogar contra ...DNAD 2015  - Como a arquitetura emergente de sua aplicação pode jogar contra ...
DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra ...Gleicon Moraes
 
Captando requisitos de forma ágil
Captando requisitos de forma ágilCaptando requisitos de forma ágil
Captando requisitos de forma ágilNícolas Iensen
 
Mini curso de testes ágeis
Mini curso de testes ágeisMini curso de testes ágeis
Mini curso de testes ágeisQualister
 
Mocking Test - GDG-SP - Setembro/2016
Mocking Test - GDG-SP - Setembro/2016Mocking Test - GDG-SP - Setembro/2016
Mocking Test - GDG-SP - Setembro/2016Renato Groff
 
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Renato Groff
 

Similar to Tuning JVM performance (20)

Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021
Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021
Camunda User Group Brazil - Remote Meetup #3 - 8 jun 2021
 
Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017
 
Criando o mvp (minimum viable product)
Criando o mvp (minimum viable product)Criando o mvp (minimum viable product)
Criando o mvp (minimum viable product)
 
Visao geralti netshoes03
Visao geralti netshoes03Visao geralti netshoes03
Visao geralti netshoes03
 
Visao geralti netshoes03
Visao geralti netshoes03Visao geralti netshoes03
Visao geralti netshoes03
 
[GUTS-RS] Evento julho 2017 - Como iniciar os testes de performance em uma a...
[GUTS-RS] Evento julho 2017 -  Como iniciar os testes de performance em uma a...[GUTS-RS] Evento julho 2017 -  Como iniciar os testes de performance em uma a...
[GUTS-RS] Evento julho 2017 - Como iniciar os testes de performance em uma a...
 
O que move a web atualmente?
O que move a web atualmente?O que move a web atualmente?
O que move a web atualmente?
 
1º Meetup Zabbix Meetup do Recife: Aécio Pires - Gerenciando Zabbix com o Sal...
1º Meetup Zabbix Meetup do Recife: Aécio Pires - Gerenciando Zabbix com o Sal...1º Meetup Zabbix Meetup do Recife: Aécio Pires - Gerenciando Zabbix com o Sal...
1º Meetup Zabbix Meetup do Recife: Aécio Pires - Gerenciando Zabbix com o Sal...
 
Gerenciando o Zabbix com o SaltStack
Gerenciando o Zabbix com o SaltStackGerenciando o Zabbix com o SaltStack
Gerenciando o Zabbix com o SaltStack
 
Gerenciando o Zabbix com o SaltStack
Gerenciando o Zabbix com o SaltStackGerenciando o Zabbix com o SaltStack
Gerenciando o Zabbix com o SaltStack
 
burlando um WAF
burlando um WAFburlando um WAF
burlando um WAF
 
DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra ...
DNAD 2015  - Como a arquitetura emergente de sua aplicação pode jogar contra ...DNAD 2015  - Como a arquitetura emergente de sua aplicação pode jogar contra ...
DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra ...
 
DDD + BDD + TDD + Scrum
DDD + BDD + TDD + ScrumDDD + BDD + TDD + Scrum
DDD + BDD + TDD + Scrum
 
TechEd_OFC305
TechEd_OFC305TechEd_OFC305
TechEd_OFC305
 
Captando requisitos de forma ágil
Captando requisitos de forma ágilCaptando requisitos de forma ágil
Captando requisitos de forma ágil
 
Mini curso de testes ágeis
Mini curso de testes ágeisMini curso de testes ágeis
Mini curso de testes ágeis
 
Mocking Test - GDG-SP - Setembro/2016
Mocking Test - GDG-SP - Setembro/2016Mocking Test - GDG-SP - Setembro/2016
Mocking Test - GDG-SP - Setembro/2016
 
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
 
TDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - FloripaTDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - Floripa
 
BDD em Ação
BDD em AçãoBDD em Ação
BDD em Ação
 

More from Luan Cestari

Getting Started with SOA using SwitchYard
Getting Started with SOA using SwitchYardGetting Started with SOA using SwitchYard
Getting Started with SOA using SwitchYardLuan Cestari
 
Indo para as nuvens mais rápido e fácil com Docker
Indo para as nuvens mais rápido e fácil com DockerIndo para as nuvens mais rápido e fácil com Docker
Indo para as nuvens mais rápido e fácil com DockerLuan Cestari
 
Lightblue project
Lightblue project Lightblue project
Lightblue project Luan Cestari
 
Latinoware 2013 - OpenStack RDO - A walkthrough by the Open Source Cloud Comp...
Latinoware 2013 - OpenStack RDO - A walkthrough by the Open Source Cloud Comp...Latinoware 2013 - OpenStack RDO - A walkthrough by the Open Source Cloud Comp...
Latinoware 2013 - OpenStack RDO - A walkthrough by the Open Source Cloud Comp...Luan Cestari
 

More from Luan Cestari (7)

Getting Started with SOA using SwitchYard
Getting Started with SOA using SwitchYardGetting Started with SOA using SwitchYard
Getting Started with SOA using SwitchYard
 
Indo para as nuvens mais rápido e fácil com Docker
Indo para as nuvens mais rápido e fácil com DockerIndo para as nuvens mais rápido e fácil com Docker
Indo para as nuvens mais rápido e fácil com Docker
 
Lightblue project
Lightblue project Lightblue project
Lightblue project
 
Open stack
Open stackOpen stack
Open stack
 
Big data
Big dataBig data
Big data
 
Open stack
Open stackOpen stack
Open stack
 
Latinoware 2013 - OpenStack RDO - A walkthrough by the Open Source Cloud Comp...
Latinoware 2013 - OpenStack RDO - A walkthrough by the Open Source Cloud Comp...Latinoware 2013 - OpenStack RDO - A walkthrough by the Open Source Cloud Comp...
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
  • 3. Introdução | Batepapo 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
  • 11. Arquitetura de memória OpenJDK Metaspace 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
  • 14. Tunning e Profiling| Bottom-up http://slidesha.re/ZNZvg4 @BR_LuanCestari
  • 15. Tunning e Profiling| Bottom-up http://slidesha.re/ZNZvg4 @BR_LuanCestari
  • 16. Tunning e Profiling| 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
  • 22. Dúvidas? http://slidesha.re/1kQU0Yg @BR_LuanCestari http://slidesha.re/ZNZvg4 @BR_LuanCestari