funcionamento e otimização da garbage collection na oracle hotspot jvm

52
Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM Serge Gebhardt – @sergegebhardt – http://sgeb.me Adriano Bonat – @tanob TDC 2013, Porto Alegre

Upload: adriano-bonat

Post on 22-May-2015

364 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Funcionamento e otimização da Garbage Collection na Oracle

Hotspot JVM

Serge Gebhardt – @sergegebhardt – http://sgeb.meAdriano Bonat – @tanob

TDC 2013, Porto Alegre

Page 2: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Quem já teve problemas de performance resolvidos com a otimização do GC?

Page 3: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Exemplos de problemas de GC

Page 4: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Exemplos de problemas de GC

Tempo de resposta aumenta com tempo

Page 5: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Exemplos de problemas de GC

GC lento demais: aplicação pausada

Page 6: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Exemplos de problemas de GC

Pode ser relacionado ao GC,mas não necessariamente

Page 7: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Objetivos do GC

● reduzir Latência (latency)○ exemplo 1: tempo de resposta

● aumentar Vazão (throughput)○ exemplo 2: gastar o menor tempo possivel no GC

● reduzir Footprint○ exemplo 3: a memória não é infinita

Page 8: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Gerência de memória explícita

char *buffer = (char *) malloc(1024 * sizeof(char));

free(buffer);

Suscetível a esses problemas:● Ponteiro inválido (dangling pointer)● Vazamento de memória (memory leak)● Controle manual de desalocação

Page 9: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Gerência de memória automática

Responsabilidades do garbage collector (GC):● alocar memória● manter objetos referenciados na memória● desalocar memória de objetos que não são

mais referenciados● tornar a memória desalocada disponível

para próxima alocação

Page 10: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Características do GC Automático

Serial Parallel

Page 11: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Características do GC Automático

Stop-The-World (serial)

Concurrent

Stop-The-World (parallel)Concurrent

Page 12: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Características do GC Automático

● compacting vs non-compacting

Inicio

Compacting

Non-compacting

Page 13: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Conceito de Gerações

A maioria das aplicações têm:

● Objetos de vida curta (efêmeros)● Raras referências de objetos antigos para

novos objetos

⇒ Separar os objetos em duas gerações:● Young Generation● Old Generation

Page 14: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Conceito de Gerações

Page 15: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Tipos de GC na JVM Oracle

1. Serial Collector2. Parallel Collector3. Parallel Compacting Collector4. Concurrent Mark-Sweep (CMS) Collector5. Garbage First (G1) a partir do Oracle JDK 7

Page 16: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

1. Serial Collector

As duas geracões (young e old):● Serial (usa só um core)● Stop-The-World (a aplicação é

pausada)

-XX:+UseSerialGC

Page 17: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

1. Serial Collector - Young Gen

-XX:+UseSerialGC

Page 18: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

1. Serial Collector - Young Gen

-XX:+UseSerialGC

Page 19: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

1. Serial Collector - Old Gen

“Mark-Sweep-Compact”

-XX:+UseSerialGC

Page 20: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

1. Serial Collector

Em geral usado em modo “client” quando:● não tem multiplos cores / CPUs● com pouca memória● pode ter pausas de alguns

minutos no worst-case

-XX:+UseSerialGC

Page 21: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

2. Parallel Collector - Young Gen

● Em paralelo (usa múltiplos cores / CPUs)

● Stop-The-World (a aplicação é pausada)

Mesma estratégia do que no Serial Collector, mas em paralelo

-XX:+UseParallelGC

Page 22: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

2. Parallel Collector - Old Gen

● Serial (usa só um core)● Stop-The-World (a aplicação é

pausada)

Mesma estratégia do que no Serial Collector

-XX:+UseParallelGC

Page 23: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

2. Parallel Collector

Usado quando:● tem múltiplos cores / CPUs● pode ter pausas de alguns

minutos no worst-case

Exemplos: cálculos cientificos, billing, batch processing

Em geral é melhor usar o Parallel Compacting Collector (próximo slide)

-XX:+UseParallelGC

Young Gen Old Gen

Page 24: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

3. Parallel Compacting Collector

Young Gen:Parallel (mesma estratégia do que no Parallel Collector)

Old Gen:Parallel

Os dois são Stop-The-World

-XX:+UseParallelOldGC

Young Gen Old Gen

Page 25: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

3. Parallel Compacting Collector

Usado quando:● tem múltiplos cores / CPUs● pode ter pausas de alguns segundos no worst-case● eventualmente vai substituir o Parallel Collector

Não usa quando nenhum proceso pode pausar a máquina (por exemplo SunRays). Neste caso pode limitar o número de CPUs usado pelo GC: -XX:ParallelGCThreads=n

-XX:+UseParallelOldGC

Page 26: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

4. Concurrent Mark-Sweep (CMS) Collector

-XX:+UseConcMarkSweepGC

Young Gen:Parallel e Stop-The-World (mesma estratégia do que no Parallel Collector)

Old Gen:Parallel e Concurrent (ao mesmo tempo do que a aplicação usando múltiplos cores / CPUs)Young Gen Old Gen

Page 27: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

4. Concurrent Mark-Sweep (CMS) Collector

-XX:+UseConcMarkSweepGC

Old Gen

● Opção para ativar o Concurrent Mark incremental:-XX:+CMSIncrementalMode

● Dá mais tempo de processamento para a aplicação quando tem poucos cores / CPUs (~1 ou 2)

Page 28: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

4. Concurrent Mark-Sweep (CMS) Collector

-XX:+UseConcMarkSweepGC

Old Gen

● Não compactador ⇒ fragmentação do Old Gen

● Fragmentação do Old Gen pode resultar em pausas longas no GC do Young Gen

● Stop-The-World quando falta memória na Old Gen

Page 29: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

4. Concurrent Mark-Sweep (CMS) Collector

● Mais trabalho ⇒ mais overhead● Precisa de mais memória (pq é concurrent)● Mas menos latência; o CMS é também chamado de

low-latency collector

Usa quando:● precisa pausas curtas de GC ⇒ pouca latência● tem suficiente número de cores / CPUs (ao mínimo 2)

Exemplo: servidores web

-XX:+UseConcMarkSweepGC

Page 30: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

5. Garbage First (G1) a partir do Oracle JDK 7

Motivações:● Reduzir fragmentação● Tempos de pausa mais previsíveis (-XX:

MaxGCPauseMillis=n)

-XX:+UseG1GC

Page 31: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

5. Garbage First (G1) a partir do Oracle JDK 7

-XX:+UseG1GC

Page 32: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Comparação das estratégias

Serial Collector

Parallel Collector

Parallel Compacting

CollectorCMS G1

Young Gen

SerialSTW

ParallelSTW

ParallelSTW

ParallelSTW

ParallelSTW

Old Gen

SerialSTW

SerialSTW

ParallelSTW

ParallelConcurrent

ParallelConcurrent

STW = Stop-The-World

Page 33: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Máquina “client” Máquinas “server”(CPUs >= 2 && RAM >= 2 GB&& ! Win_32)

Modo da JVM(pode forçar com-client ou -server)

client server

Garbage Collector Serial Collector Parallel Collector

Tamanho inicial do Heap(-Xmsn)

4 MB 1/64 da memória total, até 1 GB (mínimo 32 MB)

Tamanho max do Heap(-Xmxn)

64 MB 1/4 da memória total, até 1 GB

Ergonomics a partir do Oracle JDK 5

Page 34: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Métricas e análise do GC

Page 35: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

● Suite de testes de performance● Representativo do uso em produção

● Para cada medida, variar apenas um parâmetro

Dicas para uma boa análise de performance

Page 36: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

JMX

Permite a conexão à JVM a distância

-Dcom.sun.management.jmxremote

-Dcom.sun.management.jmxremote.port=9010

-Dcom.sun.management.jmxremote.local.only=false

-Dcom.sun.management.jmxremote.authenticate=false

-Dcom.sun.management.jmxremote.ssl=false

Page 37: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

JMX

● JConsole● VisualVM

(+ VisualGC)

Page 38: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Arquivos de log

Opções da linha de comando:

● -XX:+PrintGC

● -XX:+PrintGCDetails○ com mais detalhes

● -XX:+PrintGCTimeStamps○ com datas absolutas

Page 39: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Outras ferramentas

● jmap● jstat● hprof: Heap Profiler● hat: Heap Analysis Tool● Eclipse MAT (Memory Analyzer)

Page 40: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Exemplo, antes:Concurrent Mark-Sweep (CMS)

Page 41: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Exemplo, antes:Concurrent Mark-Sweep (CMS)

Page 42: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Exemplo, antes:Concurrent Mark-Sweep (CMS)

Page 43: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Exemplo, antes:CMS, com GC manuais

Page 44: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Exemplo, análiseMáquina com 4 CPUs e 1 GB alocado à JVM

● Comportamento da aplicação● Frequência e tamanho das alocações no

heap (Young Gen)● Frequência das promoções Young → Old● Tempo passado no GC (Young e Old Gen)● Fragmentação do Old Gen

⇒ Encontramos o worst-case do CMS!

Page 45: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Exemplo, depois:Parallel Compacting Collector

Page 46: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Exemplo, depois:Parallel Compacting Collector

Page 47: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Exemplo, depois:Parallel Compacting Collector

Page 48: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Exemplo, resumo

● O GC recomendado não é sempre o melhor:Servidor web ⇒ latência mínima ⇒ CMS?

● Neste caso a funcionamento interno da aplicação fiz com que o Parallel Compacting Collector foi muito melhor

● Testa a performance dos varios GCs, mas entente sua aplicação para poder otimizar!

Page 49: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Assuntos mais avançados● Cada estratégia de GC tem mais parâmetros

para configurar os detalhes○ -XX:MaxGCPauseMillis=n○ -XX:GCTimeRatio=n○ –XX:NewSize=n / –XX:NewRatio=n / –XX:

SurvivorRatio=n○ –XX:ParallelGCThreads=n○ –XX:GCTimeRatio=n

● Exige um bom entendimento da aplicação● Na nossa experiência é raro precisar mudar

essas opções

Page 50: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

● http://www.oracle.com/technetwork/java/javase/memorymanagement-whitepaper-150215.pdf

● http://www.infoq.com/articles/G1-One-Garbage-Collector-To-Rule-Them-All

● http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/G1GettingStarted/index.html

Referências

Page 51: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Perguntas?

Page 52: Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM

Obrigado!

Serge Gebhardt – @sergegebhardt – http://sgeb.meAdriano Bonat – @tanob

TDC 2013, Porto Alegre