Un análisis de caso simple de recolección de basura JVM

1 clasificación de parámetros de HotSpot

 

  > Estándar: -Al principio, todo el soporte de HotSpot

  > No estándar: comience con -X, las versiones específicas de HotSpot admiten comandos específicos

  > Inestable: comience con -XX, la próxima versión puede cancelarse

java -X ver parámetros estándar

 

2 Comprender los parámetros de JVM a través de experimentos

 

clase pública HelloGC {

    public static void main (String [] args) {

      System.out.println ("¡HolaGC!");

      Lista lista = nueva LinkedList ();

      por(;;) {

        byte [] b = nuevo byte [1024 * 1024];

        list.add (b);

      }

    }

  }

 

2.1 Compilar javac HelloGC.java

2.2 java -XX: + PrintCommandLineFlags HelloGC

2.3 java -Xmn10M -Xms40M -Xmx60M -XX: + PrintCommandLineFlags -XX: + PrintGC HelloGC

Establecer el tamaño de la generación joven: -Xmn10M

Establecer el tamaño de pila mínimo: -Xms40M

Establecer el tamaño máximo de pila: -Xmx60M

Imprimir información de GC: + PrintGC

Puede ver que el GC aquí se refiere a YGC, pero también a la información de Full GC.

2.4 java -Xmn10M -Xms40M -Xmx60M -XX: + PrintCommandLineFlags -XX: + PrintGCDetails -XX: + PrintGCTimeStamps HelloGC

Establecer detalles de impresión GC: + PrintGCDetails

Establezca la marca de tiempo cuando se produce el CG impreso enviado por impresión: + PrintGCTimeStamps

2.5 java -XX: + UseConcMarkSweepGC -XX: + PrintCommandLineFlags HelloGC

Configure el recolector de basura antiguo como: CMS

2.6 java -XX: + UseConcMarkSweepGC -XX: + PrintCommandLineFlags -XX: + PrintGC HelloGC

2.7 java -XX: + UseConcMarkSweepGC -XX: + PrintCommandLineFlags -XX: + PrintGCDetails HelloGC

2.8. Java -XX: + PrintFlagsInitial valores de parámetro predeterminados

2.9. Java -XX: + PrintFlagsFinal valor del parámetro final

 

para resumir:

 

 

eden space 5632K, 94% usado [0x00000000ff980000,0x00000000ffeb3e28,0x00000000fff00000)

             La siguiente dirección de memoria se refiere a la dirección inicial, la dirección final del espacio utilizado y la dirección final del espacio total.

 

1. Rendimiento: tiempo de código de usuario / (tiempo de ejecución del código de usuario + tiempo de recolección de basura)

2. Tiempo de respuesta: cuanto más corto sea el STW, mejor será el tiempo de respuesta.

problema:

Cálculos científicos, rendimiento. Minería de datos, rendimiento. Prioridad de rendimiento general: (PS + PO)

Tiempo de respuesta: API de GUI del sitio web (1.8 G1)

3 Establecer parámetros de registro

  -Xloggc: /opt/xxx/logs/xxx-xxx-gc-%t.log -XX: + UseGCLogFileRotation -XX: NumberOfGCLogFiles = 5 -XX: GCLogFileSize = 20M -XX: + PrintGCDetails -XX: + PrintGCDateStamps -XX: + PrintGCCause

Caso:

1. Hay un sitio web de datos de 500.000 PV (extracción de documentos del disco a la memoria) servidor original de 32 bits, 1,5G

   Los comentarios de los usuarios de que el sitio web es relativamente lento, por lo que la empresa decidió actualizar, el nuevo servidor es de 64 bits, 16G

   Como resultado, los usuarios comentan que el retraso es muy serio, pero la eficiencia es menor que antes.

   1. ¿Por qué el sitio web original es lento?

      Muchos usuarios buscan datos, se cargan muchos datos en la memoria, memoria insuficiente, GC frecuente, STW largo, tiempo de respuesta lento

   2. ¿Por qué está más rezagado?

      Cuanto mayor sea la memoria, mayor será el tiempo de FGC

   3. ¿Qué hacer?

      PS -> PN + CMS o G1

2. La CPU del sistema suele estar al 100%, ¿cómo ajustarla?

   Si la CPU está al 100%, entonces debe haber subprocesos que ocupen recursos del sistema,

   1. Descubra qué proceso tiene una CPU alta (arriba)

   2. ¿Qué subproceso en el proceso tiene alta CPU (top -Hp)?

   3. Exportar la pila del hilo (jstack)

   4. Encuentre qué método (marco de pila) consume tiempo (jstack)

   5. Alta proporción de subprocesos de trabajadores | alta proporción de subprocesos de recolección de basura

3. La memoria del sistema es tan alta, ¿cómo encontrar el problema? (Frecuencia de la entrevista)

   1. Exportar memoria de pila (jmap)

   2. 分析 (jhat jvisualvm mat jprofiler ...)

4. Cómo monitorear JVM

   1. jstat jvisualvm jprofiler arthas top ...

 

Supongo que te gusta

Origin blog.csdn.net/huzhiliayanghao/article/details/106931443
Recomendado
Clasificación