Herramientas de Diagnóstico de Fugas de Memoria en WebSphere con Integración Tivoli

  1. Flujo estructurado para identificar fugas

Un enfoque sistemático mejora la eficiencia del diagnóstico:

  1. Detección temprana: Activar el Performance and Diagnostic Advisor (PDA) para alertas automáticas basadas en patrones de uso del heap.

  2. Monitoreo en tiempo real: Configurar PMI (Performance Monitoring Infrastructure) y visualizar métricas JVM mediante el Tivoli Performance Viewer (TPV).

  3. Análisis cuantitativo: Habilitar registros detallados de recolección de basura (verbose GC) y procesarlos con Pattern Modelinng and Analysis Tool (PMAT).

  4. Inspección profunda: Generar archivos heapdump (en formato PHD o HPROF) y analizarlos con Memory Dump Diagnostic for Java (MDD4J).

  5. Corrección iterativa: Validar hallazgos contra el código fuente y validar correcciones mediante pruebas controladas.

  6. Alertas proactivas con Performance and Diagnostic Advisor


Desde WAS 6.0.2, el PDA incluye reglas heurísticas para detectar tendencias anómalas en el heap. No requiere instrumentación manual ni sobrecarga significativa.

Configuración mínima:

  • Acceder al Administrative ConsoleServersApplication Servers.
  • Seleccionar el servidor objetivo → PerformancePerformance and Diagnotsic Advisor.
  • En la pestaña Configuration, asegurar que Enable memory leak detection esté activado (indicado por un ícono verde).

Ejemplo de alerta en SystemOut.log:

[15/04/2024 09:42:17:821 CEST] 0000002a PDAWarning    W   TUNE9001W: Heap utilization exceeds safe thresholds for 3 consecutive intervals. Possible memory leak detected.
  1. Análisis de recolección de basura con PMAT

Al habilitar -Xverbosegc en las opciones JVM (y opcionalmente -agentlib:pmiJvmtiProfiler para perfiles avanzados), se genera native_stderr.log. Este archivo contiene eventos de recolección global y parcial, con métricas clave como:

  • Porcentaje libre del heap antes/después de cada GC.
  • Tiempo de pausa (exclusive access y sweep).
  • Crecimiento acumulado del tenured generation.

PMAT interpreta estos datos y genera gráficos interactivos. Una curva de "memoria usada" que muestra una pendiente positiva constante — sin descensos regulares tras cada GC — es un indicador robusto de fuga.

  1. Monitoreo dinámico con TPV y PMI

TPV permite observar métricas JVM en vivo sin modificar el código. Para usarlo:

  1. Habilitar PMI a nivel Custom en Monitoring and TuningPMI.
  2. Activar contadores específicos bajo JVM Runtime: JVM.Memory.Used, JVM.GC.TotalTime, JVM.Memory.Free.
  3. Lanzar TPV desde Monitoring and TuningPerformance ViewerCurrent Activity.

Un patrón ideal muestra picos descendentes regulares (GC exitosos). Un comportamiento escalonado o una línea casi horizontal ascendente sugiere que los objetos no se liberan correctamente.

  1. Captura controlada de heapdump

Para análisis offline, se recomienda generar dos dumps: uno inicial (baseline) y otro tras carga prolongada. En WAS 6.1+, se usa wsadmin:

# Conectarse al servidor
./wsadmin.sh -lang jython -user admin -password pass123

# Obtener nombre MBean del JVM
jvm = AdminControl.queryNames('type=JVM,process=server1,*')

# Generar dump
AdminControl.invoke(jvm, 'generateHeapDump')
# Salida: /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/heapdump.20240415.102211.12345.phd

Los archivos PHD son ligeros y compatibles con MDD4J. Evite ejecutar esta operación bajo carga crítica.

  1. Diagnóstico profundo con MDD4J

MDD4J (incluido en IBM Support Assistant) soporta análisis comparativo entre dos dumps. Sus funcionalidades clave:

  • Vista de contexto jerárquico: Muestra relaciones de retención (retained heap) entre clases y paquetes.
  • Filtrado inteligente: Destaca clases con mayor crecimiento relativo entre dumps.
  • Árbol interactivo: Permite navegar referencias entrantes/salientes desde cualquier objeto sospechoso.
  • Resúmenes accionables: Identifica automáticamente paquetes con alto número de instancias o con grandes consumos de memoria.

Tras cargar los dumps, la pestaña Suspicious Objects lista candidatos prioritarios. Por ejemplo: com.example.cache.DataCacheManager con +92% de crecimiento entre dumps y 47K instancias no recolectadas.

  1. Consideraciones operativas

La integración con soluciones Tivoli como ITCAM for WebSphere extiende este flujo con capacidades de corelación transaccional, monitoreo distribuido y alertas basadas en SLA. Sin embargo, las herramientas nativas descritas aquí ofrecen una cobertura sólida para la mayoría de escenarios de fuga de memoria — sin licencias adicionales ni dependencias externas.

Etiquetas: websphere ibm-tivoli java-memory-management pmat mdd4j

Publicado el 9-14 03:47