Java Experto: rendimientoseminarisempresa.fib.upc.edu/aulesempresa/2011/programes/Bitendia… ·...

71
Java Experto: rendimiento Marc Clausell Samitier http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Transcript of Java Experto: rendimientoseminarisempresa.fib.upc.edu/aulesempresa/2011/programes/Bitendia… ·...

Java Experto: rendimiento

Marc Clausell Samitier

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Temario (1)

• Perfiles de memoria.

• Espacios de memoria y direccionamiento del JVM.

• Algoritmos del Garbage Collection.

• Parámetros en la línea de comandos del JVM.

• Optimización inicial del heap.

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Temario (2)

• Optimización en detalle del heap.

• Ciclo de vida de los objetos.

• Monitorización de aplicaciones en producción.

• Combinación de herramientas.

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Temario (3)

• Impacto del rendimiento

• Herramientas de optimización

• Metodologías de tuning y proceso de optimización

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Motivación

• Problema típico:– Caídas en producción periódicas.

– Degradación del rendimiento.

• Solución típica:– Reiniciar el servidor.

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Motivación

• Impacto de un bajo rendimiento:– pérdida de productividad (afecta al cliente)

– pérdida de confianza y credibilidad (os afecta a vosotros)

– pérdida de ingresos (cliente y/o empresa desarrolladora)

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Complicaciones

• Evolución de las aplicaciones Java.

• Modelo de ejecución estratificado.

• Frameworks.

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Complicaciones (2)

• Modelo de ejecución:– Complejidad

horizontal– Complejidad

vertical

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Complicaciones (3)• Ventajas de usar frameworks:

– Aumentan la productividad

– Grandes comunidades opensource evolucionan rápidamente el framework

– Popularidad == testing– Orientación genérica => fácil de ampliar

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Complicaciones (4)• Desventajas de usar Frameworks:

– Efecto caja negra

– Solventar un problema interno requiere convertirse en experto

– Hacer un branch tiene implicaciones

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Metodología (1)• Primero de todo …

– Conocer la arquitectura de la aplicación y el entorno

– Plantearse: es realmente esta arquitectura necesaria?

– Tener claros los objetivos de mejora• Rendimiento

• Escalabilidad

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Metodología (2)• Arquitectura de la aplicación y el entorno:

– Sistema Operativo donde haya servicios relacionados con la aplicación.

– Componentes tecnológicos J2EE en cada estrato.

– Componentes tecnológicos no-java en cada estrato.

– Dependencias externas:• BD, servlets remotos, …

– Topología de red

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Metodología (4)

• Rendimiento de la aplicación– Concepto ambiguo– Depende del stakeholder

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Metodología (5)• Problemas relacionados con el rendimiento:

– Aplicaciones lentas– Aplicaciones que se degradan con el tiempo– memory-leaks pequeños que degeneran

gradualmente– memory-leaks grandes que tumban el servidor– picos de CPU periódicos– el comportamiento de la aplicación cambia

drásticamente con el aumento de carga– anomalías en producción que no se consiguen

reproducir en desarrollo

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Metodología (6)

• APM vs APT– Aplication Performance Management

– Aplication Performance Tuning

• APM incluye APT

• ¿Cuando aplicar APM?

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Metodología (7)

• ¿Cuando aplicar APM?

• Diseño de la arquitectura:– considerar los ciclos de vida de los objetos

• Ej.: EntityBeans para objetos read-only

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Metodología (8)

• ¿Cuando aplicar APM?

• Desarrollo:– test unitarios– test unitarios de rendimiento

• memoria (uso del heap)• code-profiling (eficiencia de algoritmos)

• coverage (determinar que porciones de código se ejecutan más frecuentemente)

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Metodología (9)

• ¿Cuando aplicar APM?

• QA (Quality Assestment):– Validar que se cumplen los SLA una vez

integrado el código

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Metodología (10)

• ¿Cuando aplicar APM?

• Preproducción– Test de carga

• Producción– Con “fuego real”

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Métricas (1)

• Cuantificación del rendimiento– Definición de rendimiento:

• Depende de los SLAs

• Depende de cada stakeholder

– Métricas generales– Métricas específicas

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Métricas (2)

• Definición de los SLAs:– Service Level Agreement

– ¿Quién los define?– Propiedades necesarias:

• Específico

• Flexible

• Realista

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Métricas (3)

• Métricas generales:– Tiempo de respuesta al usuario final

• #

• Min

• Max• Avg• Stddev

– Throughput de peticiones

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Métricas (4)

• Métricas específicas (uso de recursos):– Heap

– Thread pools– JDBC connection pools– Caches– Pools– JMS servers– JCA connection pools

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Análisis de rendimiento (1)

• Adquisición de datos– ¿Qué?– ¿Dónde?– ¿Cómo?

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Análisis de rendimiento (2)

• Adquisición de datos: ¿Qué?– Determinar granularidad

• Primero métricas generales• Luego métricas específicas

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Análisis de rendimiento (3)

• Adquisición de datos: ¿Dónde?– Rendimiento de la aplicación– Rendimiento del servidor de aplicaciones– Plataforma

– Dependencias externas

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Análisis de rendimiento (4)

• Adquisición de datos: ¿Cómo?– APIs públicas– APIs propietarias– Instrumentación de código

– APIs de sistema y herramientas

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Análisis de rendimiento (5)

• Instrumentación de código– Instrumentación ad hoc

• extraemos exactamente la información que necesitamos

– Instrumentación automática• no se modifica el código original• la herramienta puede instrumentalizar toda la aplicación• se puede modificar la cantidad de información recogida en

tiempo de ejecución• la instrumentación en bytecode es menos intrusiva• los datos se pueden recoger en un repositorio centralizado• muchas herramientas ofrecen una UI para presentar los

resultados gráficamente

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Análisis de rendimiento (6)

• Impacto de la monitorización:– “El gato de Schrödinger”

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Análisis de rendimiento (7)

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Análisis de rendimiento (8)

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Test de carga (1)

• Construcción de un test de carga:– “… conoce a tus usuarios …”

• Generación de cargas sintéticas– ordenar las peticiones a servicios por % de

tiempo– ampliar y reducir el tiempo de análisis para

modificar la granularidad del análisis– identificar variaciones de comportamiento por

hora, día, semana, mes y año

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Test de carga (2)

• Generación de cargas sintéticas (2)– observar los bytes transferidos respecto la

media de tiempo de respuesta– identificar y categorizar el origen de las

peticiones (internas/externas/ubicación geográfica)

– % de peticiones correctamente servidas– % de errores HTTP– % de afiliación de usuarios y duración de sus

sesiones

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Planificación de los test de carga

• Test unitario• Test con la aplicación integrada• Test de carga con la aplicación integrada• Test en preproducción• Test de carga en preproducción• Cálculo de los límites de capacidad

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Teoría de tuning

• Wait-point tuning

• Ley de Amdahl

• Regla del 80-20

• Programación consciente de la arquitectura

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Wait-point tuning (1)

• Buscar wait-points en la Arquitectura.• Abrir todos los wait-points.• Generar una carga representativa, equilibrada

e incremental contra el sistema.• Identificar el punto de saturación de los wait-

points.• Configurar todos los wait-points con la máxima

capacidad del wait-point más restrictivo.

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Wait-point tuning (2)

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Wait-point tuning (3)

• Wait-points típicos en entornos Web:– Heap– Web server thread pool– Servidor de aplicaciones o tier thread pool– Stateless session bean o business object

pool– Cache– Subsistema de persistencia

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Ley de Amdahl

• Determina la ganancia del sistema cuando se mejora una de sus partes

– A: ganancia

– Am: ganancia de mejora del subsistema

– Fm: tiempo de mejor en el subsistema

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Regla del 80-20 (1)

• El 80% de las mejoras en el rendimiento se obtienen mejorando el 20% del sistema

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Regla del 80-20 (2)

• 80%:– Heap– Thread pools

– Connection pools

– Caches

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Regla del 80-20 (3)

• 20%:– EJB pools– Precompilación de JSPs

– JMS

– SQL prepared statements

– Configuraciones avanzadas JDBC

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM al detalle

• ¿Qué es?

• Ciclo de vida de una JVM

• Arquitectura

• Espacios de memoria

• Threads de aplicación

• Tipos de datos

• Class-loader

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: ¿Qué es?

• Cuando usamos el término JVM nos referiremos a:

– Especificación abstracta– Implementación concreta– Instancia de una implementación concreta

en ejecución

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Ciclo de vida

• Ejecutar una única aplicación!!

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Arquitectura

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Memoria (1)

• Memoria persistente– Espacio de clases cargadas– Acceso compartido (thread-safe)– Inmersiones de eficiencia

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Memoria (2)

• Heap– Almacenamiento de objetos instanciados– Espacio compartido (no thread-safe)– Garbage Collector

– Memory-leaks

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Memoria (3)

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Memoria (4)

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Memoria (5)

• Heap: Garbage Collection– Lo bueno: él se encarga de que no se pieda

memoria– Lo malo: él se encarga de que no se pieda

memoria– Algoritmo dependiente de la implementación:

• Oracle / Sun JVM

• IBM JVM

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Memoria (6)

• Oracle / Sun JVM Heap– Estrategia generacional

– Partición del heap en 4 areas– minor-garbage collection– major-garbage collection

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Memoria (7)

• Oracle / Sun JVM Heap

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Memoria (8)

• Oracle / Sun JVM Garbage Collector– Estado de los objetos del Heap:

• Alcanzables

• No alcanzables

– Grafo de dependencias– Nodos iniciales del grafo: root set

• Objetos estáticos

• Objetos creados por cualquier thread

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Memoria (9)

• Oracle / Sun JVM Garbage Collector– root set

01: public class MyClass {02: public static final Integer n = new Integer( 10

);03: public Integer square( Integer i ) {04: int result = i.intValue() * i.intValue();05: return new Integer( result );06: }07: public static void main( String[] args ) {08: MyClass m = new MyClass();09: Integer i = new Integer( args[ 0 ] );10: i = m.square( i );11: }12:}

1 --2 n7 n, args8 n, args, m9 n, args, m, i3 n, args, m, i4 n, args, m, i, results5 n, args, m, i, results, anonymous Integer10 n, args, m, i11 n12 n

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Memoria (10)

• Oracle / Sun JVM Garbage Collector

JVM: Memoria (11)

• Oracle / Sun JVM Garbage Collector

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Memoria (12)

• Oracle / Sun JVM Garbage Collector– Minor-collections

• De centésimas a décimas de segundo• Concurrente

– Major-collections• De décimas a varios segundos

• Bloqueante

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Memoria (13)

• Oracle / Sun JVM Garbage Collector– Parámetros específicos

• –XmxNNNm• –XmsNNNm• –XX:MaxNewSize=NNNm• –XX:NewSize=NNN• –XX:SurvivorRatio=n

– Ejemplo:-Xmx1024m -Xms1024m -XX:MaxNewSize=448m -XX:NewSize=448m -XX:SurvivorRatio=6

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Memoria (14)

• Oracle / Sun JVM Heap

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Memoria (15)

• Oracle / Sun JVM Heap

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Memoria (16)

• IBM JVM Heap– Estrategia por bloques (>512bytes)

– Materia oscura– Único algoritmo de garbage collection

• mark & sweep

• compaction & refactoring-references– No todos los objetos se pueden refactorizar (JNI)

• Trigered garbage collection

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Memoria (17)

• IBM JVM Heap– Parámetros recomendados:

• -Xms < -Xmx

• -Xmx ~= 130% de la carga máxima

• 30% < -Xminf < 40% del espacio libre• 20Mb < -Xmine < 50Mb• -Xgcpolicy:optavgpause

• -Xgcpolicy:gencon

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Threads

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Tipos de datos (1)

• Tipología:– Básicos– Referencias

• Especificación del lenguaje fuertemente definida

• Especificación de la JVM débilmente definida– word

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Tipos de datos (2)

• byte 8-bit CA2 (-27 to 27 - 1, inclusive)• short 16-bit CA2 (-215 to 215 - 1, inclusive)• int 32-bit CA2 (-231 to 231 - 1, inclusive)• long 64-bit CA2 (-263 to 263 - 1, inclusive)• char 16-bit Unicode caracter

• float 32-bit IEEE 754 precisión simple• double 64-bit IEEE 754 doble precisión• reference @heap, o null

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Tipos de datos (3)

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

JVM: Class-loader

• Tipos:– Bootstrap class-loader– User defined class-loader

• Responsabilidades:– Carga [class’ format a bytecode/nativecode]– Enlace con el código en ejecución.

• Verificar la consistencia léxica y sintáctica de la clase• Reservar espacio para la clase y sus atributos • Cambiar las referencias simbólicas a referencias directas del

espacio de memoria

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Programación consciente de la JVM

• ArrayList & Vector• Evitar

– Object Cycling– News

• Usar– Tipos básicos– Clases estáticas sin estado

• No hacer tareas que ya hace el compilador

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Programación consciente de la JVM

• ArrayList & Vector– Eficientes para

• Consultar• Actualizar

– Ineficientes para• Añadir• Quitar

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com

Programación consciente de la JVM

• ArrayList & Vector– Añadir al principio (peor)– Añadir al final (mejor)– Predefinir el tamaño aumenta el rendimiento

• LinkedList– No usar acceso por índice– Insertar o quitar dependen de la distancia al

final de la lista– Estructura interna “sucia”

http://www.aulesempresa.upc.edu/aulesempresa/2011.html http://www.bitendian.com