sobre sana saludables saludable que mala libro hablen gratis eres comes autores alimentos alimentación alimentacion java garbage-collection

java - sana - ¿Hay una guía de libros de cocina para problemas de GC?



libro de la alimentacion sana (2)

De varios recursos, he compilado una lista de verificación de cordura que uso para analizar el comportamiento y el rendimiento de mis aplicaciones. Estas pautas son generales y se aplican a cualquier JVM específica del proveedor, pero también contienen información específica de HotspotVM para ilustración.

  1. Deshabilitar GC explícito . CG explícito es una mala práctica de codificación, nunca ayuda. Use -XX:+DisableExplicitGC .

  2. Habilite el registro de GC completo . Ligero pero poderoso.

    • Compute el conjunto de datos en vivo , la tasa de asignación y la tasa de promoción . Esto le dirá si necesita un Heap más grande o si su ej. Young Gen es demasiado pequeño, o si sus espacios de Sobrevivientes están desbordados, etc.
    • Calcule el tiempo total del GC , debe ser <5% del tiempo total de funcionamiento.
    • Use -XX:+PrintTenuringDistribution -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log -XX:+HeapDumpOnOutOfMemoryError -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -showversion
  3. Considere medios adicionales para recopilar información sobre su GC . El registro está bien, pero a veces hay herramientas de línea de comandos ligeras disponibles que le darán aún más información. P.ej. jstat for Hotspot que le mostrará la ocupación / capacidad de Eden, Survivor y Old Gen.

  4. Collect Histograms de clase Estos son lightweigh y le mostrarán el contenido del montón. Puede tomar instantáneas siempre que observe alguna actividad extraña de GC, o puede tomarlas antes / después de GC completo:

    • Contenido del espacio OldGen : puede averiguar qué objetos residen en OldGen. Debe imprimir histogramas antes y después de GC completo. Y dado que una colección YoungGen se ejecuta antes del GC completo, estos Histogramas le mostrarán el contenido de la generación anterior. Use -XX:+PrintClassHistogramBeforeFullGC -XX:+PrintClassHistogramAfterFullGC.
    • Detección de objetos promocionados prematuramente : para determinar si alguna instancia se promociona temprano, debe estudiar los Histogramas para ver qué clases se espera que residan en el OldGen y qué clases se deben ver solo en YoungGen. Esto no se puede hacer de manera automática, necesita razonar sobre el propósito de cada clase y su instancia para determinar si el objeto es temporal o no.
  5. Considere diferentes algoritmos GC . Las máquinas virtuales por lo general vienen con varias implementaciones de GC diferentes que ofrecen varias ventajas y desventajas: rendimiento, espacio ocupado, pausas sin pausa / pausas cortas, tiempo real, etc. Considere las opciones que tiene y elija aquella que satisfaga sus necesidades.

  6. Cuidado con finalizar () . Verifique que GC mantenga las clases usando finalize() . La ejecución de este método puede ser bastante costosa y esto puede afectar el rendimiento de GC y de la aplicación.

  7. Heap Dumps. Este es el primer paso que es pesado y tendrá un impacto en la aplicación en ejecución. Recoja el Heap Dump para estudiar más a fondo el contenido del montón o para confirmar una hipótesis observada en el paso 4.

Recursos utilizados:

Libros:

Conversaciones / Artículos:

Listas de correo:

Casi todos finalmente se encuentran con problemas de GC con Java.

¿Hay una guía de libros de cocina o herramienta semiautomatizada para sintonizar GC para Java?

Mi razonamiento es este:

  • Casi cualquier persona eventualmente tiene estos problemas
  • Hay muchos factores posibles (digamos 20) de los cuales solo unos pocos afectan su problema.
  • La mayoría de las personas no saben cómo identificar los factores clave, por lo que la sintonización de GC es más como un arte negro que una ciencia.
  • No todo el mundo usa una máquina virtual de HotSpot. Las diferentes versiones de Sun tienen diferentes características de GC.
  • Hay pocos incentivos para experimentar (como ejecutar la VM con ajustes ligeramente diferentes todos los días para ver cómo funcionan).

Entonces, la pregunta realmente es: ¿hay algo que pueda usar en una lista de verificación? O tal vez incluso una herramienta que analiza los registros de GC o los volcados de almacenamiento y me da pistas específicas sobre dónde mirar (en lugar de decirme que "el 95% de los datos se asignan en objetos del tipo byte []" que es básicamente inútil).

Preguntas relacionadas:


Referencias para diversa información de GC:

Oráculo

Ajuste la recolección de elementos no utilizados con la máquina virtual 5.0 [tm] Java

y esto también

Java SE 6 HotSpot [tm] Virtual Machine Garbage Collection Tuning

IBM

Fine Tuning Garbage Collection [enlace muerto]

Juego de herramientas extensible de Verbose

SAP JVM

Gestión de memoria (recolección de basura)

Detección de fugas de memoria

Detectando máquinas virtuales Hanging / Looping

Analizando situaciones sin memoria

Lo siento, no sé mucho sobre SAP, pero he proporcionado algunas cosas que he encontrado.

En cuanto a un libro de cocina, es muy probable que la afinación sea específica de la aplicación en este nivel, pero es un tema interesante.

APÉNDICE

También mencionó herramientas de análisis. Algunos candidatos se enumeran aquí:

¿Conoce alguna herramienta de análisis de registro de recolección de basura de Java?