SlideShare une entreprise Scribd logo
1  sur  102
Télécharger pour lire hors ligne
JVM GC 
WTF?! 
Alonso Torres @alotor
Alonso Torres 
@alotor @alotor 
mobro.co/alotor
java.lang.OutOfMemoryError: unable to create new native thread 
java.lang.OutOfMemoryError: Stack overflow 
java.lang.OutOfMemoryError: PermGen space 
java.lang.OutOfMemoryError: Metaspace 
java.lang.OutOfMemoryError: Java heap space 
java.lang.OutOfMemoryError: GC overhead limit exceeded 
java.lang.OutOfMemoryError: requested... Out of swap space?
SUCCESS
No tengo memoria!!! 
Todo va lento!!!!!! 
El GC es ineficiente!!!!!
With CMS GC, the full collection is serial and STW, 
hence your application threads are stopped for the 
entire duration while the heap space is reclaimed 
and then compacted. 
The duration for the STW pause depends on your 
heap size and the surviving objects. 
http://www.infoq.com/articles/G1-One-Garbage-Collector-To-Rule-Them-All
Con el recolector CMS, la recolección es “serie” y 
STW, y los hilos de tu aplicación serán detenidos 
por la duración completa mientras el espacio del 
“heap” es recuperado y compactado. 
La duración de la pausa STW dependerá del 
tamaño del “heap” y de los objetos supervivientes. 
http://www.infoq.com/articles/G1-One-Garbage-Collector-To-Rule-Them-All
JVM 
Java Virtual Machine 
GC 
Garbage Collectors 
WTF?! 
Why They Fail?!
1. Estructura de la memoria 
2. Conceptos generales de GC 
3. Tipos de recolectores de Hotspot 
4. Configuración de Hotspot
Os presento la 
JVM
JVM PROCESS: 1.591 Gb
JVM PROCESS: 1.591 Gb 
Memoria propia de la JVM
JVM PROCESS: 1.591 Gb 
Memoria de ejecución
JVM PROCESS: 1.591 Gb 
Memoria de datos
JVM PROCESS: 1.591 Gb 
Memoria de clases
HEAP 
- Bloque de memoria que la JVM se encargará de 
gestionar 
- Almacena los datos de los objetos 
- Memoria dinámica
OCUPADA LIBRE 
Max. Heap Size
OCUPADA LIBRE 
Max. Heap Size
OCUPADA LIBRE 
Max. Heap Size
OCUPADA LIBRE
OCUPADA LIBRE
AUMENTAMOS el heap 
ó 
LIBERAMOS memoria
OCUPADA LIBRE 
Aumenta el heap 
Liberamos el heap 
OCUPADA LIBRE
¿Cómo liberamos la memoria 
que ya no necesitamos?
Garbage Collection 
1. Busca todos los objetos vivos 
2. Libera la memoria de los objetos muertos 
3. Mueve la posición de memoria de los vivos
GC’s en OpenJDK Hotspot 
- Serial Collector 
- Parallel Collector 
- CMS Collector 
- G1
GC’s en OpenJDK Hotspot 
- Serial Collector 
- Parallel Collector 
- CMS Collector 
- G1
MALDITOS 
TÉRMINOS!!
Stop the World (STW) 
- Parada global de todos los hilos de ejecución para 
realizar recolección de basura 
- El contrario puede ser CONCURRENTE 
○ La recolección se ejecuta a la vez que el 
programa
STW Concurrente
Paralelo 
● La ejecución se realiza en varios hilos de ejecución 
● Aprovecha sistemas con múltiples CPUs 
● Por contra puede ser SERIE 
○ Sólo se ejecutaría en un hilo
Paralelo Serie
Incremental 
● El trabajo de recolección no se realiza en un único 
paso sino en varias fases o pasos 
● Por el contrario puede ser MONOLÍTICO 
○ Todo se ejecuta en un sólo paso
Incremental Monolítico
Weak Generational Hypothesis 
- La mayoría de los objetos mueren jóvenes 
- Los objetos viejos no suelen referenciar a objetos 
jóvenes
Generational GC 
Dos tipos de recolección: 
○ 1 espacio pequeño con muchos muertos 
○ 1 espacio grande donde casi todos vivos
Número de objetos vivos Número de objetos
TODOS 
los GC’s son generacionales
Generational heap structure 
YOUNG OLD/TENURE
Generational heap structure 
SURVIVORS 
SURVIVORS 
EDEN OLD/TENURE
Recolectamos la Young Generation 
Objetos promocionados van a supervivientes y a la 
Old Generation
La Old Generation está llena 
Necesitamos una recolección completa
Empty young and survivors. 
Free dead old-gen objects
GC’s en OpenJDK Hotspot 
● Serial Collector 
● Parallel Collector 
● CMS Collector 
● G1 (Garbage First) Collector
Serial Collector 
YOUNG GENERATION OLD GENERATION 
Serial 
Monolithic 
Stop-The-World 
Copying Mark / Sweep / Compact
Algoritmo de COPIA (Scavenge) 
- Copia los objetos vivos de una región de la 
memoria a otra 
- Libera la zona de memoria antigua
Mark / Sweep / Compact (MSC) 
1. Mark
Mark / Sweep / Compact (MSC) 
2. Sweep
Mark / Sweep / Compact (MSC) 
3. Compact
GC’s en OpenJDK Hotspot 
● Serial Collector 
● Parallel Collector 
● CMS Collector 
● G1 (Garbage First) Collector
Parallel Collector 
YOUNG GENERATION OLD GENERATION 
Paralelo Serie / Paralelo 
Monolítico 
Stop-The-World 
Copying Mark / Sweep / Compact
GC’s en OpenJDK Hotspot 
● Serial Collector 
● Parallel Collector 
● CMS Collector 
● G1 (Garbage First) Collector
Concurrent Mark & Sweep 
YOUNG GENERATION OLD GENERATION 
Paralelo Serie Y Paralelo 
Monolítico Incremental 
Stop-The-World STW Y Concurrente 
Copying Mark and Sweep
Concurrent Mark & Sweep 
1. Initial Mark 
2. Concurrent Mark 
3. Remark 
4. Concurrent Sweep
CMS 
No compacta
CMS después de varias generaciones
Cuando hay excesiva 
fragmentación 
STW,Serial, Monolithic, MSC* 
*AKA: Full GC
GC’s en OpenJDK Hotspot 
● Serial Collector 
● Parallel Collector 
● CMS Collector 
● G1 (Garbage First) Collector
Garbage First (G1) 
- Retrasar al máximo un “Full GC” 
- Baja latencia 
- Predictibilidad 
- Fácil de usar
Garbage First (G1) 
- Divide el heap en regiones 
- Libera primero las que tienen más basura 
(Garbage First) 
- Compacta sobre la marcha
E O 
O 
E 
O 
O 
O 
S 
G1 Heap Structure 
E
Garbage First (G1) 
1. Recolección de Young Collection 
2. Marcado concurrente 
3. Recolección mixta 
4. Full GC
Young collection 
E O 
O 
E E 
O 
O 
O 
E
Young collection 
O 
O 
O 
O 
O 
S
Garbage First (G1) 
1. Recolección de Young Collection 
2. Marcado concurrente 
3. Recolección mixta 
4. Full GC
Marcado concurrente 
E O 
O 
O 
O 
O 
E 
E O 
S 
O O
Marcado concurrente 
E O 
O 
E 
X 
O 
X 
O 
O O 
O
Garbage First (G1) 
1. Recolección de Young Collection 
2. Marcado concurrente 
3. Recolección mixta 
4. Full GC
Recolección mixta 
E O 
O 
E 
E X 
O 
X 
E 
O 
O O 
O 
O 
O 
O 
O
Recolección mixta 
E O 
O 
E 
E X 
O 
X 
E 
O 
O O 
O 
O 
O 
O 
O
Recolección mixta 
O 
O 
O 
X 
O 
O O 
O 
O 
O 
O 
S O
Garbage First (G1) 
1. Recolección de Young Collection 
2. Marcado concurrente 
3. Recolección mixta 
4. Full GC
Todos los GC’s de Hotspot 
tienen algún tipo de STW
STW 
es el mayor enemigo 
del rendimiento
Objetivos de optimización 
1. Maximizar recolección JOVEN 
2. Minimizar los STW 
3. Evitar objetos grandes 
4. Evitar retención de objetos
Monitorizar la aplicación
Opciones de monitorización 
-Xloggc:<file> 
-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps
[GC [PSYoungGen: 578424K->8793K(630784K)] 
1007570K->444386K(1155072K), 0.0185270 secs] 
[Times: user=0.06 sys=0.00, real=0.02 secs] 
[GC [PSYoungGen: 580697K->15128K(636928K)] 
1016290K->459169K(1161216K), 0.0236090 secs] 
[Times: user=0.08 sys=0.01, real=0.02 secs] 
[GC [PSYoungGen: 450179K->6893K(635904K)] 
894221K->465458K(1160192K), 0.0249430 secs] 
[Times: user=0.07 sys=0.02, real=0.02 secs] 
[Full GC [PSYoungGen: 6893K->0K(635904K)] 
[ParOldGen: 458564K->454236K(816128K)] 465458K->454236K(1452032K) 
[PSPermGen: 171991K->171852K(344064K)], 2.5341620 secs] 
[Times: user=8.48 sys=0.01, real=2.53 secs]
[GC [PSYoungGen: 578424K->8793K(630784K)] 
1007570K->444386K(1155072K), 0.0185270 secs] 
[Times: user=0.06 sys=0.00, real=0.02 secs] 
[GC [PSYoungGen: 580697K->15128K(636928K)] 
1016290K->459169K(1161216K), 0.0236090 secs] 
[Times: user=0.08 sys=0.01, real=0.02 secs] 
[GC [PSYoungGen: 450179K->6893K(635904K)] 
894221K->465458K(1160192K), 0.0249430 secs] 
[Times: user=0.07 sys=0.02, real=0.02 secs] 
[Full GC [PSYoungGen: 6893K->0K(635904K)] 
Recolección Young Generation 
[ParOldGen: 458564K->454236K(816128K)] 465458K->454236K(1452032K) 
[PSPermGen: 171991K->171852K(344064K)], 2.5341620 secs] 
[Times: user=8.48 sys=0.01, real=2.53 secs] 
Full GC (STW)
YOUNG SURVIVORS OLD 
Resumen del total
Análisis en detalle
Herramientas 
jcmd pid GC.class_histogram
num #instances #bytes class name 
---------------------------------------------- 
1: 762525 71798392 [C 
2: 41739 68376080 [B 
3: 675097 54007760 java.lang.reflect.Method 
4: 404377 51770560 <methodKlass> 
5: 404377 49495808 <constMethodKlass> 
6: 864167 48393352 org.codehaus.groovy.runtime.metaclass. 
7: 17110 29966392 <constantPoolKlass> 
8: 710424 22733568 java.util.HashMap$Entry 
9: 13777 18368640 <constantPoolCacheKlass> 
10: 760859 18260616 java.lang.String 
11: 507462 15419000 [Ljava.lang.Object; 
12: 17104 14833688 <instanceKlassKlass> 
13: 85375 12536048 [Lorg.codehaus.groovy.util.ComplexKeyHashMap$En 
14: 303170 9701440 org.codehaus.groovy.util.SingleKeyHashMap$Entry 
15: 386458 9274992 org.codehaus.groovy.util.FastArray 
16: 50174 8596088 [Ljava.util.HashMap$Entry; 
17: 333114 7010016 [Ljava.lang.Class;
Herramientas 
jcmd pid GC.class_histogram 
jcmd pid GC.heap_dump filename 
+ 
jhat heapdumpfile
Herramientas 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=path
Configurar la JVM
Configuraciones 
-Xmx / -Xms 
Tamaño máximo y mínimo del HEAP 
-XX:MaxGCPauseMillis=n 
Recomendación de pausas 
-XX:SurvivorRatio=n 
Tamaño del espacio de supervivientes
Tantas como para 
otra charla ;)
1. Estructura de la memoria 
2. Conceptos generales de GC 
3. Tipos de recolectores de Hotspot 
4. Configuración de Hotspot
Con el recolector CMS, la recolección es “serie” y 
STW, y los hilos de tu aplicación serán detenidos 
por la duración completa mientras el espacio del 
“heap” es recuperado y compactado. 
La duración de la pausa STW dependerá del 
tamaño del “heap” y de los objetos supervivientes. 
http://www.infoq.com/articles/G1-One-Garbage-Collector-To-Rule-Them-All
No es tan fiero el lobo 
como lo pintan
Alonso Torres 
@alotor @alotor 
mobro.co/alotor
Bonus (post-presentación) 
- Alternativas a JConsole 
○ VisualVM 
○ AppDynamics 
- Para medir paradas del GC 
○ JHiccup http://www.azulsystems.com/product/jHiccup 
○ JMeter

Contenu connexe

Tendances

Evadiendo antivirus - uso de crypters
Evadiendo antivirus - uso de cryptersEvadiendo antivirus - uso de crypters
Evadiendo antivirus - uso de cryptersINCIDE
 
Apache Storm: Desarrollo
Apache Storm: DesarrolloApache Storm: Desarrollo
Apache Storm: DesarrolloStratebi
 
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_moralesRooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_moralesRootedCON
 
Apache Storm: Instalación
Apache Storm: InstalaciónApache Storm: Instalación
Apache Storm: InstalaciónStratebi
 
Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...
Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...
Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...Víctor Leonel Orozco López
 
JConf México 2020 - Micronaut + GraalVM = <3
JConf México 2020 - Micronaut + GraalVM = <3JConf México 2020 - Micronaut + GraalVM = <3
JConf México 2020 - Micronaut + GraalVM = <3Iván López Martín
 
JConf Perú 2020 - Micronaut + GraalVM = <3
JConf Perú 2020 - Micronaut + GraalVM = <3JConf Perú 2020 - Micronaut + GraalVM = <3
JConf Perú 2020 - Micronaut + GraalVM = <3Iván López Martín
 

Tendances (8)

Evadiendo antivirus - uso de crypters
Evadiendo antivirus - uso de cryptersEvadiendo antivirus - uso de crypters
Evadiendo antivirus - uso de crypters
 
Apache Storm: Desarrollo
Apache Storm: DesarrolloApache Storm: Desarrollo
Apache Storm: Desarrollo
 
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_moralesRooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
 
Apache Storm: Instalación
Apache Storm: InstalaciónApache Storm: Instalación
Apache Storm: Instalación
 
Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...
Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...
Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...
 
Tolerancia a fallas, service mesh y chassis
Tolerancia a fallas, service mesh y chassisTolerancia a fallas, service mesh y chassis
Tolerancia a fallas, service mesh y chassis
 
JConf México 2020 - Micronaut + GraalVM = <3
JConf México 2020 - Micronaut + GraalVM = <3JConf México 2020 - Micronaut + GraalVM = <3
JConf México 2020 - Micronaut + GraalVM = <3
 
JConf Perú 2020 - Micronaut + GraalVM = <3
JConf Perú 2020 - Micronaut + GraalVM = <3JConf Perú 2020 - Micronaut + GraalVM = <3
JConf Perú 2020 - Micronaut + GraalVM = <3
 

Similaire à (Codemotion 2014) JVM GC: WTF?!

Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018
Jerónimo López | Introducción a GraalVM | Codemotion Madrid  2018  Jerónimo López | Introducción a GraalVM | Codemotion Madrid  2018
Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018 Codemotion
 
JVM tuning: Lo que debes saber antes de subir a producción
JVM tuning: Lo que debes saber antes de subir a producciónJVM tuning: Lo que debes saber antes de subir a producción
JVM tuning: Lo que debes saber antes de subir a producciónEduardo Sánchez Contreras
 
HackDay Java 9 Spanish version
HackDay Java 9 Spanish versionHackDay Java 9 Spanish version
HackDay Java 9 Spanish versionHillmerC
 
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011Jano González
 
Administración de memoria en java
Administración de memoria en javaAdministración de memoria en java
Administración de memoria en javaLuis Miguel De Bello
 
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]RootedCON
 
Rendimiento en magento
Rendimiento en magentoRendimiento en magento
Rendimiento en magentoOnestic
 
Cuestionario de informatica (1)
Cuestionario de informatica (1)Cuestionario de informatica (1)
Cuestionario de informatica (1)joha_eac
 
Cuestionario de informatica
Cuestionario de informaticaCuestionario de informatica
Cuestionario de informaticamishelord
 
Cuestionario de Informatica II
Cuestionario de Informatica IICuestionario de Informatica II
Cuestionario de Informatica IImishelord
 
Cuestionario de informatica
Cuestionario de informaticaCuestionario de informatica
Cuestionario de informaticaMariaCardenas05
 
CUESTIONARIO
CUESTIONARIOCUESTIONARIO
CUESTIONARIOUTMACH
 
Cuestionario de informatica II
Cuestionario de informatica IICuestionario de informatica II
Cuestionario de informatica IImishelord
 
Cuestionario de informatica
Cuestionario de informaticaCuestionario de informatica
Cuestionario de informaticagabrielaortiz07
 
Cuestionario de informatica
Cuestionario de informaticaCuestionario de informatica
Cuestionario de informaticamishelord
 

Similaire à (Codemotion 2014) JVM GC: WTF?! (20)

Presentación Detección de Memory Leaks en Android
Presentación Detección de Memory Leaks en AndroidPresentación Detección de Memory Leaks en Android
Presentación Detección de Memory Leaks en Android
 
Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018
Jerónimo López | Introducción a GraalVM | Codemotion Madrid  2018  Jerónimo López | Introducción a GraalVM | Codemotion Madrid  2018
Jerónimo López | Introducción a GraalVM | Codemotion Madrid 2018
 
JVM tuning: Lo que debes saber antes de subir a producción
JVM tuning: Lo que debes saber antes de subir a producciónJVM tuning: Lo que debes saber antes de subir a producción
JVM tuning: Lo que debes saber antes de subir a producción
 
Capitulo7
Capitulo7Capitulo7
Capitulo7
 
HackDay Java 9 Spanish version
HackDay Java 9 Spanish versionHackDay Java 9 Spanish version
HackDay Java 9 Spanish version
 
Tem0599c
Tem0599cTem0599c
Tem0599c
 
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
 
Paralela10
Paralela10Paralela10
Paralela10
 
Administración de memoria en java
Administración de memoria en javaAdministración de memoria en java
Administración de memoria en java
 
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]
 
Rendimiento en magento
Rendimiento en magentoRendimiento en magento
Rendimiento en magento
 
Cuestionario de informatica (1)
Cuestionario de informatica (1)Cuestionario de informatica (1)
Cuestionario de informatica (1)
 
Cuestionario de informatica
Cuestionario de informaticaCuestionario de informatica
Cuestionario de informatica
 
Cuestionario de Informatica II
Cuestionario de Informatica IICuestionario de Informatica II
Cuestionario de Informatica II
 
Cuestionario de informatica (1)
Cuestionario de informatica (1)Cuestionario de informatica (1)
Cuestionario de informatica (1)
 
Cuestionario de informatica
Cuestionario de informaticaCuestionario de informatica
Cuestionario de informatica
 
CUESTIONARIO
CUESTIONARIOCUESTIONARIO
CUESTIONARIO
 
Cuestionario de informatica II
Cuestionario de informatica IICuestionario de informatica II
Cuestionario de informatica II
 
Cuestionario de informatica
Cuestionario de informaticaCuestionario de informatica
Cuestionario de informatica
 
Cuestionario de informatica
Cuestionario de informaticaCuestionario de informatica
Cuestionario de informatica
 

Plus de Alonso Torres

[Greach 17] make concurrency groovy again
[Greach 17] make concurrency groovy again[Greach 17] make concurrency groovy again
[Greach 17] make concurrency groovy againAlonso Torres
 
[Jbcn 2016] Garbage Collectors WTF!?
[Jbcn 2016] Garbage Collectors WTF!?[Jbcn 2016] Garbage Collectors WTF!?
[Jbcn 2016] Garbage Collectors WTF!?Alonso Torres
 
[Greach 2016] Down The RabbitMQ Hole
[Greach 2016] Down The RabbitMQ Hole[Greach 2016] Down The RabbitMQ Hole
[Greach 2016] Down The RabbitMQ HoleAlonso Torres
 
[Codemotion 2015] patrones de diseño con java8
[Codemotion 2015] patrones de diseño con java8[Codemotion 2015] patrones de diseño con java8
[Codemotion 2015] patrones de diseño con java8Alonso Torres
 
(Greach 2015) Dsl'ing your Groovy
(Greach 2015) Dsl'ing your Groovy(Greach 2015) Dsl'ing your Groovy
(Greach 2015) Dsl'ing your GroovyAlonso Torres
 
(Greach 2015) Decathlon Sport Meeting
(Greach 2015) Decathlon Sport Meeting(Greach 2015) Decathlon Sport Meeting
(Greach 2015) Decathlon Sport MeetingAlonso Torres
 
(Codemotion 2014) 20 lenguajes en 40 minutos
(Codemotion 2014) 20 lenguajes en 40 minutos(Codemotion 2014) 20 lenguajes en 40 minutos
(Codemotion 2014) 20 lenguajes en 40 minutosAlonso Torres
 
Understanding GORM (Greach 2014)
Understanding GORM (Greach 2014)Understanding GORM (Greach 2014)
Understanding GORM (Greach 2014)Alonso Torres
 

Plus de Alonso Torres (8)

[Greach 17] make concurrency groovy again
[Greach 17] make concurrency groovy again[Greach 17] make concurrency groovy again
[Greach 17] make concurrency groovy again
 
[Jbcn 2016] Garbage Collectors WTF!?
[Jbcn 2016] Garbage Collectors WTF!?[Jbcn 2016] Garbage Collectors WTF!?
[Jbcn 2016] Garbage Collectors WTF!?
 
[Greach 2016] Down The RabbitMQ Hole
[Greach 2016] Down The RabbitMQ Hole[Greach 2016] Down The RabbitMQ Hole
[Greach 2016] Down The RabbitMQ Hole
 
[Codemotion 2015] patrones de diseño con java8
[Codemotion 2015] patrones de diseño con java8[Codemotion 2015] patrones de diseño con java8
[Codemotion 2015] patrones de diseño con java8
 
(Greach 2015) Dsl'ing your Groovy
(Greach 2015) Dsl'ing your Groovy(Greach 2015) Dsl'ing your Groovy
(Greach 2015) Dsl'ing your Groovy
 
(Greach 2015) Decathlon Sport Meeting
(Greach 2015) Decathlon Sport Meeting(Greach 2015) Decathlon Sport Meeting
(Greach 2015) Decathlon Sport Meeting
 
(Codemotion 2014) 20 lenguajes en 40 minutos
(Codemotion 2014) 20 lenguajes en 40 minutos(Codemotion 2014) 20 lenguajes en 40 minutos
(Codemotion 2014) 20 lenguajes en 40 minutos
 
Understanding GORM (Greach 2014)
Understanding GORM (Greach 2014)Understanding GORM (Greach 2014)
Understanding GORM (Greach 2014)
 

Dernier

Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 

Dernier (20)

Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 

(Codemotion 2014) JVM GC: WTF?!

  • 1. JVM GC WTF?! Alonso Torres @alotor
  • 2. Alonso Torres @alotor @alotor mobro.co/alotor
  • 3.
  • 4. java.lang.OutOfMemoryError: unable to create new native thread java.lang.OutOfMemoryError: Stack overflow java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemoryError: Metaspace java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: GC overhead limit exceeded java.lang.OutOfMemoryError: requested... Out of swap space?
  • 5.
  • 7. No tengo memoria!!! Todo va lento!!!!!! El GC es ineficiente!!!!!
  • 8. With CMS GC, the full collection is serial and STW, hence your application threads are stopped for the entire duration while the heap space is reclaimed and then compacted. The duration for the STW pause depends on your heap size and the surviving objects. http://www.infoq.com/articles/G1-One-Garbage-Collector-To-Rule-Them-All
  • 9. Con el recolector CMS, la recolección es “serie” y STW, y los hilos de tu aplicación serán detenidos por la duración completa mientras el espacio del “heap” es recuperado y compactado. La duración de la pausa STW dependerá del tamaño del “heap” y de los objetos supervivientes. http://www.infoq.com/articles/G1-One-Garbage-Collector-To-Rule-Them-All
  • 10.
  • 11. JVM Java Virtual Machine GC Garbage Collectors WTF?! Why They Fail?!
  • 12. 1. Estructura de la memoria 2. Conceptos generales de GC 3. Tipos de recolectores de Hotspot 4. Configuración de Hotspot
  • 15. JVM PROCESS: 1.591 Gb Memoria propia de la JVM
  • 16. JVM PROCESS: 1.591 Gb Memoria de ejecución
  • 17. JVM PROCESS: 1.591 Gb Memoria de datos
  • 18. JVM PROCESS: 1.591 Gb Memoria de clases
  • 19. HEAP - Bloque de memoria que la JVM se encargará de gestionar - Almacena los datos de los objetos - Memoria dinámica
  • 20. OCUPADA LIBRE Max. Heap Size
  • 21. OCUPADA LIBRE Max. Heap Size
  • 22. OCUPADA LIBRE Max. Heap Size
  • 25. AUMENTAMOS el heap ó LIBERAMOS memoria
  • 26. OCUPADA LIBRE Aumenta el heap Liberamos el heap OCUPADA LIBRE
  • 27. ¿Cómo liberamos la memoria que ya no necesitamos?
  • 28. Garbage Collection 1. Busca todos los objetos vivos 2. Libera la memoria de los objetos muertos 3. Mueve la posición de memoria de los vivos
  • 29. GC’s en OpenJDK Hotspot - Serial Collector - Parallel Collector - CMS Collector - G1
  • 30. GC’s en OpenJDK Hotspot - Serial Collector - Parallel Collector - CMS Collector - G1
  • 32. Stop the World (STW) - Parada global de todos los hilos de ejecución para realizar recolección de basura - El contrario puede ser CONCURRENTE ○ La recolección se ejecuta a la vez que el programa
  • 34. Paralelo ● La ejecución se realiza en varios hilos de ejecución ● Aprovecha sistemas con múltiples CPUs ● Por contra puede ser SERIE ○ Sólo se ejecutaría en un hilo
  • 36. Incremental ● El trabajo de recolección no se realiza en un único paso sino en varias fases o pasos ● Por el contrario puede ser MONOLÍTICO ○ Todo se ejecuta en un sólo paso
  • 38. Weak Generational Hypothesis - La mayoría de los objetos mueren jóvenes - Los objetos viejos no suelen referenciar a objetos jóvenes
  • 39. Generational GC Dos tipos de recolección: ○ 1 espacio pequeño con muchos muertos ○ 1 espacio grande donde casi todos vivos
  • 40. Número de objetos vivos Número de objetos
  • 41. TODOS los GC’s son generacionales
  • 42. Generational heap structure YOUNG OLD/TENURE
  • 43. Generational heap structure SURVIVORS SURVIVORS EDEN OLD/TENURE
  • 44.
  • 45.
  • 46. Recolectamos la Young Generation Objetos promocionados van a supervivientes y a la Old Generation
  • 47.
  • 48. La Old Generation está llena Necesitamos una recolección completa
  • 49. Empty young and survivors. Free dead old-gen objects
  • 50. GC’s en OpenJDK Hotspot ● Serial Collector ● Parallel Collector ● CMS Collector ● G1 (Garbage First) Collector
  • 51. Serial Collector YOUNG GENERATION OLD GENERATION Serial Monolithic Stop-The-World Copying Mark / Sweep / Compact
  • 52. Algoritmo de COPIA (Scavenge) - Copia los objetos vivos de una región de la memoria a otra - Libera la zona de memoria antigua
  • 53. Mark / Sweep / Compact (MSC) 1. Mark
  • 54. Mark / Sweep / Compact (MSC) 2. Sweep
  • 55. Mark / Sweep / Compact (MSC) 3. Compact
  • 56. GC’s en OpenJDK Hotspot ● Serial Collector ● Parallel Collector ● CMS Collector ● G1 (Garbage First) Collector
  • 57. Parallel Collector YOUNG GENERATION OLD GENERATION Paralelo Serie / Paralelo Monolítico Stop-The-World Copying Mark / Sweep / Compact
  • 58. GC’s en OpenJDK Hotspot ● Serial Collector ● Parallel Collector ● CMS Collector ● G1 (Garbage First) Collector
  • 59. Concurrent Mark & Sweep YOUNG GENERATION OLD GENERATION Paralelo Serie Y Paralelo Monolítico Incremental Stop-The-World STW Y Concurrente Copying Mark and Sweep
  • 60. Concurrent Mark & Sweep 1. Initial Mark 2. Concurrent Mark 3. Remark 4. Concurrent Sweep
  • 62. CMS después de varias generaciones
  • 63. Cuando hay excesiva fragmentación STW,Serial, Monolithic, MSC* *AKA: Full GC
  • 64. GC’s en OpenJDK Hotspot ● Serial Collector ● Parallel Collector ● CMS Collector ● G1 (Garbage First) Collector
  • 65. Garbage First (G1) - Retrasar al máximo un “Full GC” - Baja latencia - Predictibilidad - Fácil de usar
  • 66. Garbage First (G1) - Divide el heap en regiones - Libera primero las que tienen más basura (Garbage First) - Compacta sobre la marcha
  • 67. E O O E O O O S G1 Heap Structure E
  • 68. Garbage First (G1) 1. Recolección de Young Collection 2. Marcado concurrente 3. Recolección mixta 4. Full GC
  • 69. Young collection E O O E E O O O E
  • 70. Young collection O O O O O S
  • 71. Garbage First (G1) 1. Recolección de Young Collection 2. Marcado concurrente 3. Recolección mixta 4. Full GC
  • 72. Marcado concurrente E O O O O O E E O S O O
  • 73. Marcado concurrente E O O E X O X O O O O
  • 74. Garbage First (G1) 1. Recolección de Young Collection 2. Marcado concurrente 3. Recolección mixta 4. Full GC
  • 75. Recolección mixta E O O E E X O X E O O O O O O O O
  • 76. Recolección mixta E O O E E X O X E O O O O O O O O
  • 77. Recolección mixta O O O X O O O O O O O S O
  • 78. Garbage First (G1) 1. Recolección de Young Collection 2. Marcado concurrente 3. Recolección mixta 4. Full GC
  • 79. Todos los GC’s de Hotspot tienen algún tipo de STW
  • 80. STW es el mayor enemigo del rendimiento
  • 81. Objetivos de optimización 1. Maximizar recolección JOVEN 2. Minimizar los STW 3. Evitar objetos grandes 4. Evitar retención de objetos
  • 83. Opciones de monitorización -Xloggc:<file> -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
  • 84. [GC [PSYoungGen: 578424K->8793K(630784K)] 1007570K->444386K(1155072K), 0.0185270 secs] [Times: user=0.06 sys=0.00, real=0.02 secs] [GC [PSYoungGen: 580697K->15128K(636928K)] 1016290K->459169K(1161216K), 0.0236090 secs] [Times: user=0.08 sys=0.01, real=0.02 secs] [GC [PSYoungGen: 450179K->6893K(635904K)] 894221K->465458K(1160192K), 0.0249430 secs] [Times: user=0.07 sys=0.02, real=0.02 secs] [Full GC [PSYoungGen: 6893K->0K(635904K)] [ParOldGen: 458564K->454236K(816128K)] 465458K->454236K(1452032K) [PSPermGen: 171991K->171852K(344064K)], 2.5341620 secs] [Times: user=8.48 sys=0.01, real=2.53 secs]
  • 85. [GC [PSYoungGen: 578424K->8793K(630784K)] 1007570K->444386K(1155072K), 0.0185270 secs] [Times: user=0.06 sys=0.00, real=0.02 secs] [GC [PSYoungGen: 580697K->15128K(636928K)] 1016290K->459169K(1161216K), 0.0236090 secs] [Times: user=0.08 sys=0.01, real=0.02 secs] [GC [PSYoungGen: 450179K->6893K(635904K)] 894221K->465458K(1160192K), 0.0249430 secs] [Times: user=0.07 sys=0.02, real=0.02 secs] [Full GC [PSYoungGen: 6893K->0K(635904K)] Recolección Young Generation [ParOldGen: 458564K->454236K(816128K)] 465458K->454236K(1452032K) [PSPermGen: 171991K->171852K(344064K)], 2.5341620 secs] [Times: user=8.48 sys=0.01, real=2.53 secs] Full GC (STW)
  • 86.
  • 87. YOUNG SURVIVORS OLD Resumen del total
  • 89. Herramientas jcmd pid GC.class_histogram
  • 90. num #instances #bytes class name ---------------------------------------------- 1: 762525 71798392 [C 2: 41739 68376080 [B 3: 675097 54007760 java.lang.reflect.Method 4: 404377 51770560 <methodKlass> 5: 404377 49495808 <constMethodKlass> 6: 864167 48393352 org.codehaus.groovy.runtime.metaclass. 7: 17110 29966392 <constantPoolKlass> 8: 710424 22733568 java.util.HashMap$Entry 9: 13777 18368640 <constantPoolCacheKlass> 10: 760859 18260616 java.lang.String 11: 507462 15419000 [Ljava.lang.Object; 12: 17104 14833688 <instanceKlassKlass> 13: 85375 12536048 [Lorg.codehaus.groovy.util.ComplexKeyHashMap$En 14: 303170 9701440 org.codehaus.groovy.util.SingleKeyHashMap$Entry 15: 386458 9274992 org.codehaus.groovy.util.FastArray 16: 50174 8596088 [Ljava.util.HashMap$Entry; 17: 333114 7010016 [Ljava.lang.Class;
  • 91. Herramientas jcmd pid GC.class_histogram jcmd pid GC.heap_dump filename + jhat heapdumpfile
  • 92.
  • 95. Configuraciones -Xmx / -Xms Tamaño máximo y mínimo del HEAP -XX:MaxGCPauseMillis=n Recomendación de pausas -XX:SurvivorRatio=n Tamaño del espacio de supervivientes
  • 96. Tantas como para otra charla ;)
  • 97.
  • 98. 1. Estructura de la memoria 2. Conceptos generales de GC 3. Tipos de recolectores de Hotspot 4. Configuración de Hotspot
  • 99. Con el recolector CMS, la recolección es “serie” y STW, y los hilos de tu aplicación serán detenidos por la duración completa mientras el espacio del “heap” es recuperado y compactado. La duración de la pausa STW dependerá del tamaño del “heap” y de los objetos supervivientes. http://www.infoq.com/articles/G1-One-Garbage-Collector-To-Rule-Them-All
  • 100. No es tan fiero el lobo como lo pintan
  • 101. Alonso Torres @alotor @alotor mobro.co/alotor
  • 102. Bonus (post-presentación) - Alternativas a JConsole ○ VisualVM ○ AppDynamics - Para medir paradas del GC ○ JHiccup http://www.azulsystems.com/product/jHiccup ○ JMeter