SlideShare uma empresa Scribd logo
1 de 74
Baixar para ler offline
JVM and Tools
Gleydson Lima
gleydson@esig.group
JVM
• “Write once, run anyware”
• Multithreading nativo.
• Garbage Collection
• Bytecode verifier (segurança)
• Carregamento dinâmico de classes (Dynamic Classloading)
• As classes só são carregadas no momento que precisam ser usadas.
• Gerenciada e Monitorada (profiler, VisualGC, JConsole, JMX, etc)
• Interpretada mas compilada com JIT (Just in Time Compiler)
Linguagens e JVM
• A plataforma Java é diferente da linguagem Java.
• A Java Virtual Machine (JVM) é uma plaforma de execução de bytecodes.
Dezenas de
linguagens de
programação
Outras implementações
Compilação
• JIT – Just In Time Compiler
• Compilação previa a interpretação do código.
• AOT – Ahead of Time Compiler
• Compilação antecipada (ahead of time = antes do tempo)
• Não suportada pela JVM tradicional (o AOT da JVM é apenas do bytecode)
• Suportada pela GraalVM
JVM Memory Model
• Cada Thread possui sua área de variáveis locais,
denominado Thread Stack.
• 1 MB por padrão (java -
XX:ThreadStackSize=1024)
Garbage Collection
Generation Garbage Collector
Generation Garbage Collector
Eden: Área inicialmente alocada para a
maioria dos objetos.
Espaço Sobrevivente (heap): O pool que
contém objetos que sobreviveram à
coleta de lixo do espaço Eden.
Geração tenured (heap): O pool que
contém objetos que já existiram por
algum tempo no espaço sobrevivente.
Heap Memory
PermGen x MetaSpace
• PermGem é um espaço de heap especial separado do heap de
memória principal.
• Armazena métodos estáticos, classes, objetos estáticos, etc.
PermGen x MetaSpace
• Metaspace é um novo espaço de memória que substituí o PermGen
Space.
• Ele está vinculado a “Native Memory” que cresce automaticamente
por padrão.
• Ainda é possível estabelecer limites, caso queira:
Exceptions
Algoritmo de GC
• Mark-Sweep
GC Roots
• Threads ativas
• Variáveis estáticas
• Variáveis locais das threads
• Referências JNI
Mark Phase
Mark
Sweep
Garbage Collection
• JVM tem 4 tipos de algoritmos de GC:
• Serial Garbage Collector
• Parallel Garbage Collector
• CMS Garbage Collector
• G1 Garbage Collector
Serial Collector
• Uma uma única thread para todas as coletas (menores e maiores).
• Algoritmo mais simples e exige menos recursos.
• Aumenta a parada da aplicação, pois uma única thread fará o GC e
todas as outras ficarão aguardando.
• Recomendado para dispositivos de pequena memória ou aplicações
monousuário (desktop).
Parallel GC
• Múltiplas threads para coletas menores e uma thread para coleta
maior.
• Também congela outros threads de aplicativo ao executar GC
• Parallel Old Collector – Multiplas threads para coletas principais e
secundárias. Desde o Java 7u4.
• Maior troughput em sistemas multi-cores.
CMS - Concurrent Mark and Sweep
• Use múltiplas GC Threads para a coleta de lixo.
• Projetado para aplicações que precisam de pausas menores de GC e
podem gerenciar seus recursos com o GC enquanto executam.
• Executam concorrentemente com a aplicação. Não pausam a App.
• Os aplicativos que usam este tipo de GC respondem mais lentamente,
em média, mas não param de responder para realizar a coleta de lixo.
• Usam mais recursos que o Parallel Collector.
• Bom para aplicações gerais no servidor.
CMS - Concurrent Mark and Sweep
• Se 98% do tempo for gasto com GC e liberar apenas 2% do Heap, um
OutOfMemory é disparado. (-XX:-UseGCOverheadLimit para
disabilitar)
• Depreciado no Java 9
• Retirado de vez no Java 14.
G1 Garbage Collector
• G1 (Garbage First) Garbage Collector foi projetado para aplicativos
executados em máquinas multiprocessadas com grande espaço de
memória.
• Está disponível desde a atualização 4 do JDK7 e em versões posteriores.
• Substituto do CMS.
• O coletor G1 particiona o heap em um conjunto de sub-regiões de heap
de mesmo tamanho, cada uma com um intervalo contíguo de memória
virtual.
CMS x G1
• Foco inicial do G1 é fornecer uma solução para Apps que exigem
grandes heaps com latência de GC limitada.
• Isso significa tamanhos de heap de cerca de 6 GB ou mais, e tempo de
pausa estável e previsível abaixo de 0,5 segundos.
• Padrão a partir do JDK 9.
Load Average
Em resumo, estes são os valores médios dos processos esperando
execução ou em execução nos últimos períodos de 1, 5 e 15 minutos.
Load Average
regra simples:
LA >> que o número de CPUs está provavelmente bem ocupado, ou
travado por algum gargalo ou falta de recurso crítico.
LA << mais baixo que o número de CPUs está provavelmente folgado.
Load Average - Multi-cores
Top
htop
JStack
ps aux | grep java
jstack PID
https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr016.html
Thread State
JStack Thread State
Conectores Apache x Tomcat/JBoss
AJP
Implementado pelo mod_jk
HTTP
Proxy ou Balancers
Redireciona requisição HTTP
Conector e Tomcat
● Pool de Threads diferentes
○ http-xxxx
○ ajp-xxxxx
Thread por Request
Request 1
Request 2
Request 3
Dispatcher
Conector-
Thread-01
Conector-
Thread-02
Conector-
Thread-03
...
Conector-
Thread-N
Thread Pool
Request Thread
Event Loop
JMX
• A Java Management Extensions (JMX) é uma API padrão para
gerenciamento e monitoramento de recursos tais como aplicações,
dispositivos, serviços e a máquina virtual Java (JVM).
• Foi desenvolvida através de um processo Java Community Process
(JCP) que envolveu a JSR-003 (Java Management Extensions) e a JSR-
160 (JMX Remote API).
DataSource AppServer (Tomcat ou Jboss)
myAppDS
BD
Monitoramento na ESIG Group
App
SOs
Anything
Exporter App
Node Exporter
Any Exports
Prometheus
database
Vamos ver alguns casos...
GraalVM
JIT x AOT x Go (Native)
http://macias.info/entry/201912201300_graal_aot.md
import org.graalvm.polyglot.Context;
import org.graalvm.polyglot.Value;
public class PolyglotJavaAndJs {
public static void main(String[] args) {
Context context = Context.newBuilder().allowIO(true).build();
Value array = context.eval("js", "[1,2,42,4]");
int result = array.getArrayElement(2).asInt();
System.out.println(result);
}
}
https://github.com/graalvm/examples
Conhecimento compartilhado.
Obrigado!
esig.group (84) 3034-9310

Mais conteúdo relacionado

Mais procurados

TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?tdc-globalcode
 
Aplicando processamento paralelo em instruções SQL
Aplicando processamento paralelo em instruções SQLAplicando processamento paralelo em instruções SQL
Aplicando processamento paralelo em instruções SQLpichiliani
 
Testes de escalabilidade usando cloud
Testes de escalabilidade usando cloudTestes de escalabilidade usando cloud
Testes de escalabilidade usando cloudPET Computação
 
HA em PostgreSQL: O Elefante disponível para além do infinito
HA em PostgreSQL: O Elefante disponível para além do infinitoHA em PostgreSQL: O Elefante disponível para além do infinito
HA em PostgreSQL: O Elefante disponível para além do infinitoelliando dias
 
Desafios de Migrar para o Java 11+
Desafios de Migrar para o Java 11+Desafios de Migrar para o Java 11+
Desafios de Migrar para o Java 11+Sergio Lopes
 
Análise de Capacidade e Desempenho em sistemas online utilizando no conceito ...
Análise de Capacidade e Desempenho em sistemas online utilizando no conceito ...Análise de Capacidade e Desempenho em sistemas online utilizando no conceito ...
Análise de Capacidade e Desempenho em sistemas online utilizando no conceito ...Joao Galdino Mello de Souza
 
Há quanto tempo você não revisa seu ambiente de virtualização de servidores V...
Há quanto tempo você não revisa seu ambiente de virtualização de servidores V...Há quanto tempo você não revisa seu ambiente de virtualização de servidores V...
Há quanto tempo você não revisa seu ambiente de virtualização de servidores V...Bravo Tecnologia
 
Como definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicaçãoComo definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicaçãoWeverton Timoteo
 
NoSQL: Uma análise crítica
NoSQL: Uma análise críticaNoSQL: Uma análise crítica
NoSQL: Uma análise críticapichiliani
 
Cache e Performance (in portuguese)
Cache e Performance (in portuguese)Cache e Performance (in portuguese)
Cache e Performance (in portuguese)Bruno Pedro
 
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM Brasil
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM BrasilBehind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM Brasil
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM BrasilJoao Galdino Mello de Souza
 
OpenLAP Multimaster
OpenLAP MultimasterOpenLAP Multimaster
OpenLAP Multimastercioban
 
Arquiteturas Paralelas e Distribuídas - Aula 4 - Arquitetura Superescalar
Arquiteturas Paralelas e Distribuídas - Aula 4 - Arquitetura SuperescalarArquiteturas Paralelas e Distribuídas - Aula 4 - Arquitetura Superescalar
Arquiteturas Paralelas e Distribuídas - Aula 4 - Arquitetura SuperescalarCleber Fonseca
 
Copa do mundo no brasil interagindo com os torcedores em tempo real
Copa do mundo no brasil   interagindo com os torcedores em tempo realCopa do mundo no brasil   interagindo com os torcedores em tempo real
Copa do mundo no brasil interagindo com os torcedores em tempo realAmazon Web Services LATAM
 
Desmistificando Replicação no PostgreSQL
Desmistificando Replicação no PostgreSQLDesmistificando Replicação no PostgreSQL
Desmistificando Replicação no PostgreSQLEuler Taveira
 

Mais procurados (18)

TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
 
Estratégias de migração para cloud
Estratégias de migração para cloudEstratégias de migração para cloud
Estratégias de migração para cloud
 
Aplicando processamento paralelo em instruções SQL
Aplicando processamento paralelo em instruções SQLAplicando processamento paralelo em instruções SQL
Aplicando processamento paralelo em instruções SQL
 
Testes de escalabilidade usando cloud
Testes de escalabilidade usando cloudTestes de escalabilidade usando cloud
Testes de escalabilidade usando cloud
 
HA em PostgreSQL: O Elefante disponível para além do infinito
HA em PostgreSQL: O Elefante disponível para além do infinitoHA em PostgreSQL: O Elefante disponível para além do infinito
HA em PostgreSQL: O Elefante disponível para além do infinito
 
Desafios de Migrar para o Java 11+
Desafios de Migrar para o Java 11+Desafios de Migrar para o Java 11+
Desafios de Migrar para o Java 11+
 
Análise de Capacidade e Desempenho em sistemas online utilizando no conceito ...
Análise de Capacidade e Desempenho em sistemas online utilizando no conceito ...Análise de Capacidade e Desempenho em sistemas online utilizando no conceito ...
Análise de Capacidade e Desempenho em sistemas online utilizando no conceito ...
 
Há quanto tempo você não revisa seu ambiente de virtualização de servidores V...
Há quanto tempo você não revisa seu ambiente de virtualização de servidores V...Há quanto tempo você não revisa seu ambiente de virtualização de servidores V...
Há quanto tempo você não revisa seu ambiente de virtualização de servidores V...
 
Como definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicaçãoComo definir a quantidade de workers para sua aplicação
Como definir a quantidade de workers para sua aplicação
 
NoSQL: Uma análise crítica
NoSQL: Uma análise críticaNoSQL: Uma análise crítica
NoSQL: Uma análise crítica
 
Cache e Performance (in portuguese)
Cache e Performance (in portuguese)Cache e Performance (in portuguese)
Cache e Performance (in portuguese)
 
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM Brasil
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM BrasilBehind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM Brasil
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM Brasil
 
OpenLAP Multimaster
OpenLAP MultimasterOpenLAP Multimaster
OpenLAP Multimaster
 
Arquiteturas Paralelas e Distribuídas - Aula 4 - Arquitetura Superescalar
Arquiteturas Paralelas e Distribuídas - Aula 4 - Arquitetura SuperescalarArquiteturas Paralelas e Distribuídas - Aula 4 - Arquitetura Superescalar
Arquiteturas Paralelas e Distribuídas - Aula 4 - Arquitetura Superescalar
 
Pgquarrel
PgquarrelPgquarrel
Pgquarrel
 
Copa do mundo no brasil interagindo com os torcedores em tempo real
Copa do mundo no brasil   interagindo com os torcedores em tempo realCopa do mundo no brasil   interagindo com os torcedores em tempo real
Copa do mundo no brasil interagindo com os torcedores em tempo real
 
Desmistificando Replicação no PostgreSQL
Desmistificando Replicação no PostgreSQLDesmistificando Replicação no PostgreSQL
Desmistificando Replicação no PostgreSQL
 
Ruby profiling
Ruby profilingRuby profiling
Ruby profiling
 

Semelhante a JVM Tools e Coleta de Lixo

Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 
Java Virtual Threads.pptx
Java Virtual Threads.pptxJava Virtual Threads.pptx
Java Virtual Threads.pptxssuser980608
 
Gerência de Memória em Java - Parte II
Gerência de Memória em Java - Parte IIGerência de Memória em Java - Parte II
Gerência de Memória em Java - Parte IIHelder da Rocha
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
 
Desmistificando Otimização de JVM
Desmistificando Otimização de JVMDesmistificando Otimização de JVM
Desmistificando Otimização de JVMSergio Lopes
 
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio Buccianti
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio BucciantiLinux Real-Time e Java Real Time, um mundo sem delays! por Flávio Buccianti
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio BucciantiJoao Galdino Mello de Souza
 
Rodando a BlackFriday do seu eCommerce na nuvem
Rodando a BlackFriday do seu eCommerce na nuvemRodando a BlackFriday do seu eCommerce na nuvem
Rodando a BlackFriday do seu eCommerce na nuvemAmazon Web Services LATAM
 
Java Garbage Collectors - HotSpot
Java Garbage Collectors - HotSpotJava Garbage Collectors - HotSpot
Java Garbage Collectors - HotSpotFabiano Santos
 
Integração Contínua com Hudson
Integração Contínua com HudsonIntegração Contínua com Hudson
Integração Contínua com HudsonLuis Reis
 
Intro Arquitetura Oracle
Intro Arquitetura OracleIntro Arquitetura Oracle
Intro Arquitetura OraclePablo Garcia
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java FundamentosWilson Lima
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveiselliando dias
 
Cap-6-Multiplrocessadores.pdf
Cap-6-Multiplrocessadores.pdfCap-6-Multiplrocessadores.pdf
Cap-6-Multiplrocessadores.pdfHurgelNeto
 
Arquitetura 8 1 - 2012.2
Arquitetura 8   1 - 2012.2Arquitetura 8   1 - 2012.2
Arquitetura 8 1 - 2012.2Paulo Fonseca
 
Arquitetura 8 1 - 2012.2
Arquitetura 8   1 - 2012.2Arquitetura 8   1 - 2012.2
Arquitetura 8 1 - 2012.2Paulo Fonseca
 
Sistemas Operacionais - FFXOS
Sistemas Operacionais - FFXOSSistemas Operacionais - FFXOS
Sistemas Operacionais - FFXOSRafael Tavares
 

Semelhante a JVM Tools e Coleta de Lixo (20)

Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Java Virtual Threads.pptx
Java Virtual Threads.pptxJava Virtual Threads.pptx
Java Virtual Threads.pptx
 
Gerência de Memória em Java - Parte II
Gerência de Memória em Java - Parte IIGerência de Memória em Java - Parte II
Gerência de Memória em Java - Parte II
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Desmistificando Otimização de JVM
Desmistificando Otimização de JVMDesmistificando Otimização de JVM
Desmistificando Otimização de JVM
 
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio Buccianti
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio BucciantiLinux Real-Time e Java Real Time, um mundo sem delays! por Flávio Buccianti
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio Buccianti
 
Rodando a BlackFriday do seu eCommerce na nuvem
Rodando a BlackFriday do seu eCommerce na nuvemRodando a BlackFriday do seu eCommerce na nuvem
Rodando a BlackFriday do seu eCommerce na nuvem
 
Java Garbage Collectors - HotSpot
Java Garbage Collectors - HotSpotJava Garbage Collectors - HotSpot
Java Garbage Collectors - HotSpot
 
Integração Contínua com Hudson
Integração Contínua com HudsonIntegração Contínua com Hudson
Integração Contínua com Hudson
 
Intro Arquitetura Oracle
Intro Arquitetura OracleIntro Arquitetura Oracle
Intro Arquitetura Oracle
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveis
 
Java virtual machine quantas linguas fala a jvm2
Java virtual machine   quantas linguas fala a jvm2Java virtual machine   quantas linguas fala a jvm2
Java virtual machine quantas linguas fala a jvm2
 
Arquitetura 8 2
Arquitetura 8 2Arquitetura 8 2
Arquitetura 8 2
 
Java20141215 17[1]
Java20141215 17[1]Java20141215 17[1]
Java20141215 17[1]
 
Cap-6-Multiplrocessadores.pdf
Cap-6-Multiplrocessadores.pdfCap-6-Multiplrocessadores.pdf
Cap-6-Multiplrocessadores.pdf
 
Arquitetura 8 1 - 2012.2
Arquitetura 8   1 - 2012.2Arquitetura 8   1 - 2012.2
Arquitetura 8 1 - 2012.2
 
Arquitetura 8 1 - 2012.2
Arquitetura 8   1 - 2012.2Arquitetura 8   1 - 2012.2
Arquitetura 8 1 - 2012.2
 
Web assembly
Web assemblyWeb assembly
Web assembly
 
Sistemas Operacionais - FFXOS
Sistemas Operacionais - FFXOSSistemas Operacionais - FFXOS
Sistemas Operacionais - FFXOS
 

JVM Tools e Coleta de Lixo

  • 1. JVM and Tools Gleydson Lima gleydson@esig.group
  • 2. JVM • “Write once, run anyware” • Multithreading nativo. • Garbage Collection • Bytecode verifier (segurança) • Carregamento dinâmico de classes (Dynamic Classloading) • As classes só são carregadas no momento que precisam ser usadas. • Gerenciada e Monitorada (profiler, VisualGC, JConsole, JMX, etc) • Interpretada mas compilada com JIT (Just in Time Compiler)
  • 3. Linguagens e JVM • A plataforma Java é diferente da linguagem Java. • A Java Virtual Machine (JVM) é uma plaforma de execução de bytecodes. Dezenas de linguagens de programação
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 11. Compilação • JIT – Just In Time Compiler • Compilação previa a interpretação do código. • AOT – Ahead of Time Compiler • Compilação antecipada (ahead of time = antes do tempo) • Não suportada pela JVM tradicional (o AOT da JVM é apenas do bytecode) • Suportada pela GraalVM
  • 12.
  • 13.
  • 14.
  • 15. JVM Memory Model • Cada Thread possui sua área de variáveis locais, denominado Thread Stack. • 1 MB por padrão (java - XX:ThreadStackSize=1024)
  • 16.
  • 18.
  • 19.
  • 21. Generation Garbage Collector Eden: Área inicialmente alocada para a maioria dos objetos. Espaço Sobrevivente (heap): O pool que contém objetos que sobreviveram à coleta de lixo do espaço Eden. Geração tenured (heap): O pool que contém objetos que já existiram por algum tempo no espaço sobrevivente.
  • 22.
  • 23.
  • 25. PermGen x MetaSpace • PermGem é um espaço de heap especial separado do heap de memória principal. • Armazena métodos estáticos, classes, objetos estáticos, etc.
  • 26. PermGen x MetaSpace • Metaspace é um novo espaço de memória que substituí o PermGen Space. • Ele está vinculado a “Native Memory” que cresce automaticamente por padrão. • Ainda é possível estabelecer limites, caso queira:
  • 28. Algoritmo de GC • Mark-Sweep
  • 29. GC Roots • Threads ativas • Variáveis estáticas • Variáveis locais das threads • Referências JNI
  • 30.
  • 31.
  • 33. Mark
  • 34. Sweep
  • 35.
  • 36. Garbage Collection • JVM tem 4 tipos de algoritmos de GC: • Serial Garbage Collector • Parallel Garbage Collector • CMS Garbage Collector • G1 Garbage Collector
  • 37. Serial Collector • Uma uma única thread para todas as coletas (menores e maiores). • Algoritmo mais simples e exige menos recursos. • Aumenta a parada da aplicação, pois uma única thread fará o GC e todas as outras ficarão aguardando. • Recomendado para dispositivos de pequena memória ou aplicações monousuário (desktop).
  • 38. Parallel GC • Múltiplas threads para coletas menores e uma thread para coleta maior. • Também congela outros threads de aplicativo ao executar GC • Parallel Old Collector – Multiplas threads para coletas principais e secundárias. Desde o Java 7u4. • Maior troughput em sistemas multi-cores.
  • 39. CMS - Concurrent Mark and Sweep • Use múltiplas GC Threads para a coleta de lixo. • Projetado para aplicações que precisam de pausas menores de GC e podem gerenciar seus recursos com o GC enquanto executam. • Executam concorrentemente com a aplicação. Não pausam a App. • Os aplicativos que usam este tipo de GC respondem mais lentamente, em média, mas não param de responder para realizar a coleta de lixo. • Usam mais recursos que o Parallel Collector. • Bom para aplicações gerais no servidor.
  • 40. CMS - Concurrent Mark and Sweep • Se 98% do tempo for gasto com GC e liberar apenas 2% do Heap, um OutOfMemory é disparado. (-XX:-UseGCOverheadLimit para disabilitar) • Depreciado no Java 9 • Retirado de vez no Java 14.
  • 41. G1 Garbage Collector • G1 (Garbage First) Garbage Collector foi projetado para aplicativos executados em máquinas multiprocessadas com grande espaço de memória. • Está disponível desde a atualização 4 do JDK7 e em versões posteriores. • Substituto do CMS. • O coletor G1 particiona o heap em um conjunto de sub-regiões de heap de mesmo tamanho, cada uma com um intervalo contíguo de memória virtual.
  • 42.
  • 43. CMS x G1 • Foco inicial do G1 é fornecer uma solução para Apps que exigem grandes heaps com latência de GC limitada. • Isso significa tamanhos de heap de cerca de 6 GB ou mais, e tempo de pausa estável e previsível abaixo de 0,5 segundos. • Padrão a partir do JDK 9.
  • 44.
  • 45. Load Average Em resumo, estes são os valores médios dos processos esperando execução ou em execução nos últimos períodos de 1, 5 e 15 minutos.
  • 46. Load Average regra simples: LA >> que o número de CPUs está provavelmente bem ocupado, ou travado por algum gargalo ou falta de recurso crítico. LA << mais baixo que o número de CPUs está provavelmente folgado.
  • 47. Load Average - Multi-cores
  • 48. Top
  • 49. htop
  • 50. JStack ps aux | grep java jstack PID https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr016.html
  • 53. Conectores Apache x Tomcat/JBoss AJP Implementado pelo mod_jk HTTP Proxy ou Balancers Redireciona requisição HTTP
  • 54. Conector e Tomcat ● Pool de Threads diferentes ○ http-xxxx ○ ajp-xxxxx
  • 55. Thread por Request Request 1 Request 2 Request 3 Dispatcher Conector- Thread-01 Conector- Thread-02 Conector- Thread-03 ... Conector- Thread-N Thread Pool
  • 58. JMX • A Java Management Extensions (JMX) é uma API padrão para gerenciamento e monitoramento de recursos tais como aplicações, dispositivos, serviços e a máquina virtual Java (JVM). • Foi desenvolvida através de um processo Java Community Process (JCP) que envolveu a JSR-003 (Java Management Extensions) e a JSR- 160 (JMX Remote API).
  • 59. DataSource AppServer (Tomcat ou Jboss) myAppDS BD
  • 60.
  • 61. Monitoramento na ESIG Group App SOs Anything Exporter App Node Exporter Any Exports Prometheus database
  • 62. Vamos ver alguns casos...
  • 64.
  • 65.
  • 66. JIT x AOT x Go (Native) http://macias.info/entry/201912201300_graal_aot.md
  • 67.
  • 68.
  • 69.
  • 70. import org.graalvm.polyglot.Context; import org.graalvm.polyglot.Value; public class PolyglotJavaAndJs { public static void main(String[] args) { Context context = Context.newBuilder().allowIO(true).build(); Value array = context.eval("js", "[1,2,42,4]"); int result = array.getArrayElement(2).asInt(); System.out.println(result); } }
  • 72.
  • 73.