Upgrade to Pro — share decks privately, control downloads, hide ads and more …

con22150-thefutureofjvmperformancetuning-121206...

 con22150-thefutureofjvmperformancetuning-121206184933-phpapp01.pdf

This presentation dates a while ago when it was delivered in JavaOne to promote the new garbage collector introduced in HotSpot known as G1.

Ricardo Ferreira

October 22, 2014
Tweet

More Decks by Ricardo Ferreira

Other Decks in Programming

Transcript

  1. The Future of JVM Performance Tuning Copyright © 2012, Oracle

    and/or its affiliates. All rights reserved. JavaOne 2012 LAD 2 Performance Tuning Ricardo Ferreira Principal Solution Architect (A-Team) [email protected]
  2. The following is intended to outline our general product direction.

    It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 3 should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
  3. Agenda JVM, Threads, RAM, Heap e Garbage Collection Os Algoritmos

    Clássicos de Garbage Collection Overview sobre o Algoritmo G1: Garbage-First Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 4 Overview sobre o Algoritmo G1: Garbage-First Máximo Throughput usando Sockets Direct Protocol OpenJDK: Contribuindo com o futuro da JVM
  4. JVM, Threads, RAM, Heap & Garbage Collection (GC) Copyright ©

    2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 6
  5. JVM, Threads, RAM, Heap e Garbage Collection Visão Geral sobre

    JVM & Threads JVM 1 JVM 2 Sistema Operacional Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 7
  6. JVM, Threads, RAM, Heap e Garbage Collection Visão Geral sobre

    RAM e Heap Layout de Memória pra JVM Kernel do S.O (~10%) Heap (~75%) Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 8 S.O (~10%) Código Nativo (~12%) Threads (~5%)
  7. JVM, Threads, RAM, Heap e Garbage Collection Visão Geral sobre

    RAM e Heap Layout de Memória pra JVM Kernel do S.O Heap Eden Old Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 9 Código Nativo Threads Perm Stack
  8. JVM, Threads, RAM, Heap e Garbage Collection Visão Geral sobre

    Garbage Collection (GC) Objeto Objeto 0x9FFF0 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 10 Roots 0x9FFF0
  9. JVM, Threads, RAM, Heap e Garbage Collection Visão Geral sobre

    Garbage Collection (GC) Objeto Objeto Roots 0x9FFF0 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 11 Foo* foo = new Foo(); foo->doSomething(); delete foo;
  10. JVM, Threads, RAM, Heap e Garbage Collection Visão Geral sobre

    Garbage Collection (GC) Objeto Objeto Roots 0x9FFF0 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 12 Foo* foo = new Foo(); foo->doSomething(); delete foo;
  11. JVM, Threads, RAM, Heap e Garbage Collection GC são threads

    que executam em baixa prioridade na JVM Existem vários tipos de threads de um GC, mas entre eles: Visão Geral sobre Garbage Collection (GC) JVM 1 Sistema Operacional Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 13 de um GC, mas entre eles: – Mutators: Responsáveis por alocar a memória e remanejar os ponteiros e referências – Collectors: responsáveis por fazer a limpeza do espaço de memória alocado na Heap
  12. Os Algoritmos Clássicos de Garbage Collection (GC) Copyright © 2012,

    Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 14
  13. Os Algoritmos Clássicos de Garbage Collection Overview sobre os Principais

    Algoritmos de GC Conhecidos Algoritmos de GC Tempo Real Concorrentes Não Concorrentes Todos esses algoritmos possuem um objetivo ou foco particular na JVM Algumas implementações Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 15 Real Concorrentes Mark-Sweep Mark-Compact Reference Counting Copying GC Parallel Concurrent Garbage-First Deterministic Algumas implementações de GC são na prática uma combinação destes algoritmos clássicos. É possível combinar os algoritmos, desde que não ocorra trade-off.
  14. Os Algoritmos Clássicos de Garbage Collection Overview sobre os Principais

    Algoritmos de GC Conhecidos Algoritmos de GC Tempo Real Concorrentes Não Concorrentes Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 16 Real Concorrentes Mark-Sweep Mark-Compact Reference Counting Copying GC Parallel Concurrent Garbage-First Deterministic
  15. Overview sobre o Algoritmo G1: Garbage-First Copyright © 2012, Oracle

    and/or its affiliates. All rights reserved. JavaOne 2012 LAD 17
  16. Qual é a “Grande Sacada” do G1? Executar o GC

    de forma concorrente aos threads da aplicação Java Usar compactação de espaço livre sem pênalti para o tempo de GC paralelismo Principais Características do G1 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 18 Usar paralelismo para melhorar o tempo de resposta da aplicação Java Possibilitar um tempo de GC mais próximo do tempo real possível Possibilitar o uso de áreas de heap maiores que 6 GB
  17. Overview sobre o G1 (Garbage-First) Young Generation – Dividida em:

    Eden Space 2 Survivors Old Generation Eden Survivors Oracle HotSpot Antes do G1 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 19 Old Generation – Único e grande espaço contíguo – Desalocação no CMS ocorre no espaço e de forma concorrente – “Stop-the-World” para executar uma compactação total e em paralelo Old Generation
  18. Overview sobre o G1 (Garbage-First) Único espaço contínuo de memória

    quebrado em múltiplas regiões de tamanhos iguais Tamanho da região dito pela JVM no startup. Varia entre de 1 MB à 32 MB. Oracle HotSpot Depois do G1 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 20 startup. Varia entre de 1 MB à 32 MB.
  19. Young GC no CMS (Parte 1) Young Generation – Dividida

    em 1 eden e 2 espaços de survivors (Foco em objetos recentes) Old Generation – Compactado apenas no Full-GC Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 21 – Compactado apenas no Full-GC – Desalocação é feita somente dentro da região da Old Generation
  20. Young GC no CMS (Parte 2) Durante o Young GC

    – Objetos recentes da Young são evacuados (copiados/movidos) para Outro espaço de survivor Old Generation Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 22 Old Generation – Isso implica em “Stop-the-World”
  21. Young GC no CMS (Parte 3) Final do Young GC

    – Eden e 1 dos survivors devem estar completamente vazios (possivelmente) – Objetos podem ter sido promovidos para a Old Generation Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 23 para a Old Generation
  22. Young GC no G1 (Parte 1) Heap da JVM separada

    em regiões – Média de regiões: 2 KB – Cada região com 1 MB ou até 32 MB. Dá pra alterar com o argumento -XX:G1HeapRegionSize Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 24 -XX:G1HeapRegionSize Young e Old não precisam ser mais contíguos. I/O aleatórios nas regiões.
  23. Young GC no G1 (Parte 2) Durante o Young GC

    – Objetos recentes da Young são evacuados (copiados/movidos) para Uma ou mais regiões de survivor Regiões do tipo Old Generation Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 25 Regiões do tipo Old Generation – Isso implica em “Stop-the-World” – Próximo tempo de GC é calculado
  24. Young GC no G1 (Parte 3) Final da Young GC

    – Objetos recentes da Young foram evacuados (copiados/movidos) para Zero ou mais regiões de survivor Regiões do tipo Old Generation Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 26 Regiões do tipo Old Generation – Regiões do eden e survivor são potencialmente redimensionados
  25. GC na Old usando CMS :: Depois do Marking (1)

    Marcação feita de forma concorrente – 2 pausas do tipo “Stop-theWorld” Marcação inicial Remarcação – Marca objetos rastreáveis recentes Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 27 – Marca objetos rastreáveis recentes – Objetos não marcados são os que foram considerados mortos
  26. GC na Old usando CMS :: Depois do Marking (2)

    Sweeping feito de forma concorrente – Executa o sweeping em todo o espaço reservado para Old Gen – Desaloca objetos mortos que não foram marcados ou que foram marcados com a cor branca Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 28 marcados com a cor branca – Não realiza nenhuma compactação
  27. GC na Old usando CMS :: Depois do Marking (3)

    Final da fase de sweeping concorrente – Todos os objetos não marcados são desalocados e têm seu espaço limpo Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 29
  28. GC na Old usando G1 :: Depois do Marking (1)

    Marcação feita de forma concorrente – Uma única pausa “Stop-the-World” Executa remarcação Completa remarcações pendentes Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 30
  29. GC na Old usando G1 :: Depois do Marking (2)

    Marcação feita de forma concorrente – Também calcula informações sobre “sobrevivência” de objetos por região – Regiões vazias podem ser limpas imediatamente (como indicado no exemplo com o símbolo de “X”) Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 31 exemplo com o símbolo de “X”)
  30. GC na Old usando G1 :: Depois do Marking (3)

    Final da fase de remarcação – Regiões vazias são limpas – Informações sobre “sobrevivência” de objetos atualizadas para todas as regiões do tipo Old Generation Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 32
  31. GC na Old usando G1 :: Depois do Marking (4)

    Limpando regiões do tipo Old Gen – Escolhe as regiões com baixa taxa de “sobrevivência” de objetos marcados – Coleta alguns no próximo GC da Young Generation Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 33
  32. GC na Old usando G1 :: Depois do Marking (5)

    Pode ser que tenham sobrado alguns objetos nas regiões do tipo Old Gen – Nas regiões com as maiores taxas de “sobrevivência” de objetos – Mas, esses objetos podem ser Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 34 coletados mais tarde de acordo com as regiões não-utilizadas e o tempo de pausa setado na linha de comando
  33. Principais Diferenças entre o CMS e o G1 (1) CMS

    – Muito difícil de fazer tuning. Muitos parâmetros precisam ser configurados e muitos algoritmos precisam ser combinados e muito bem entendidos. Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 35 G1 – O objetivo é que você defina apenas o tamanho da heap e o tempo de pausa do GC
  34. Máximo Throughput usando Sockets Direct Protocol (SDP) Copyright © 2012,

    Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 36 Protocol (SDP)
  35. Você Lembra Disso? “The Network Is the Copyright © 2012,

    Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 37 Is the Computer” Scott McNealy Sun Microsystems, 1999
  36. Curiosidade: Uma rede InfiniBand 10 GBs InfiniBand Uso de InfiniBand

    em Sistemas de HPC (High Performance Computing) Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 38 Uma rede InfiniBand tradicional opera em 40GB/s numa latência média de 1.2 µs 0 2 4 6 8 10 12 10 MB/s 100 MB/s
  37. Uso de InfiniBand em Sistemas de HPC (High Performance Computing)

    I/O Buffer Copy Transporte TCP/IP I/O Buffer Redes Tradicionais Aplicação Aplicação Rede InfiniBand Aplicação Aplicação Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 39 Copy Transporte TCP/IP Kernel 20% Cópia em Buffers 20% em Transport Processing 40% Kernel Context Switching Zero Cópia de Buffers Direct Memory Access Bypass do Kernel 4X mais Throughput, 6X Menos Latência
  38. Suporte a SDP (Sockets Direct Protocol) no Java 7 bind

    192.168.0.16 * connect 192.168.0.12 8001 sdp.conf Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 40 connect 192.168.0.12 8001 connect 192.168.0.14 1521 java -Dcom.sun.sdp.conf=sdp.conf -Djava.net.preferIPv4Stack=true com.acme.util.Application
  39. OpenJDK: Contribuindo com o Futuro da JVM Copyright © 2012,

    Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 41
  40. OpenJDK: Contribuindo com o Futuro da JVM Principais Recursos –

    Feedback sobre assuntos em Geral: [email protected] – Questões gerais sobre o uso do GC: [email protected] – Questões de desenvolvimento do GC: [email protected] – Builds “Early Access” do JDK 8: http://jdk8.java.net/download.html Copyright © 2012, Oracle and/or its affiliates. All rights reserved. JavaOne 2012 LAD 42 – Builds “Early Access” do JDK 8: http://jdk8.java.net/download.html • Java Deployment • Java Graphics (2D, 3D) • Java Security Extensions • Java Performance Tuning • Java Core Libraries • Java Quality Assurange