6. @edusanchezcon
Tests de carga
Hay que probar un uso similar a la que tendrá en producción
Carga proporcional
Funcionalidad coherente
Entorno parecido
7. @edusanchezcon
Tests de carga: Medir y Monitorizar
Medir para saber cuánto
Tiempo de respuesta
Operaciones / Tiempo
Tiempo total por lote
Monitorizar para saber por qué
Sistema: CPU, Memoria, Disco
JVM: Memoria (Heap), GCs
Logs, Sampling, Profilers
19. @edusanchezcon
La memoria en la JVM (JDK ≤ 7)
Young Generation
Thread
N
Old Generation
Eden survivor
1 2
PC Register
JVM Stack
Native Stack
PermGen
Code
Cache
20. @edusanchezcon
¿Cómo se gestiona la Memoria?
No se libera memoria explícitamente
El Garbage Collector libera lo que ya no se usa
49. @edusanchezcon
2018-11-19T10:49:38.496-0100: 17.830:
[Full GC (Ergonomics)
[PSYoungGen: 256K->0K(43008K)]
[ParOldGen: 46473K->1524K(46592K)] 46729K->1524K(89600K),
[Metaspace: 5450K->5442K(1056768K)],
0.0075023 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
Espacio antes y después del GC (capacidad de la región de memoria)
Garbage Collector: GC Logs
50. @edusanchezcon
2018-11-19T10:49:38.496-0100: 17.830:
[Full GC (Ergonomics)
[PSYoungGen: 256K->0K(43008K)]
[ParOldGen: 46473K->1524K(46592K)] 46729K->1524K(89600K),
[Metaspace: 5450K->5442K(1056768K)],
0.0075023 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
Espacio antes y después dell GC (capacidad total del Heap)
Garbage Collector: GC Logs
57. @edusanchezcon
Optimizaciones del JIT Compiler
‣ Trivial inlining
‣ Call graph inlining
‣ Tail recursion elimination
‣ Virtual call guard optimizations
‣ Local data flow analyses and optimizations
‣ Register usage optimization
‣ Simplifications of Java idioms
‣ Code reordering, splitting, and removal
‣ Loop reduction and inversion
‣ Loop striding and loop-invariant code motion
‣ Loop unrolling and peeling
‣ Loop versioning and specialization
‣ Exception-directed optimization
‣ Switch analysis
‣ Global data flow analyses and optimizations
‣ Partial redundancy elimination
‣ Escape analysis
‣ GC and memory allocation optimizations
‣ Synchronization optimizations
58. @edusanchezcon
Ciclo de performance tuning
Determinar la carga máxima
Localizar el cuello de botella Solucionar el problema
Load Test
Sampler/Profiler
60. @edusanchezcon
Operaciones de Entrada / Salida
Cuellos de botella frecuentes
Ejecutar muchas veces lo mismo (de manera innecesaria)
Dimensionamiento ineficiente de pools de hilos