Explicación detallada de la herramienta de ajuste JVM y ajuste del combate real

Herramientas de tuning

jps

  • Ver el proceso de ejecución de java

jmap

jmap -histo 30340  #查看历史生成的实例
jmap -histo:live 30340  #查看当前存活的实例,执行过程中可能会触发一次full gc

Inserte la descripción de la imagen aquí

  • num: número de serie
  • instancias: número de instancias
  • bytes: tamaño del espacio ocupado
  • nombre de clase : 类 名称 , [C es un carácter [] , [S es un [] , [I es un int [] , [B es un byte [] , [[I es un int [] []
jmap -dump:format=b,file=/Users/mac/Desktop/java学习/Dump/2.hprof 31274
  • Coloque el archivo de volcado creado en la carpeta / Users / mac / Desktop / java learning / Dump.
  • Perfma puede analizar el archivo de volcado generado para ver información de la memoria.
    Inserte la descripción de la imagen aquí

jstack

  • Utilice jstack para ver el problema de interbloqueo del hilo
jstack -pid

Inserte la descripción de la imagen aquí
"Thread-1" nombre del hilo
prio = 5 prioridad = 5
tid = 0x000000001fa9e000 id del hilo
nid = 0x2d64 hilo correspondiente al identificador del hilo local nid
java.lang.Thread.State: estado del hilo BLOQUEADO

  • Se puede ver que Thread-1 está esperando el bloqueo de Thread-0, Thread-0 está esperando el bloqueo de Thread-1, por lo que se interbloquea .

Ver el código de CPU más utilizado

  • Utilice el comando superior para encontrar los hilos utilizados con más frecuencia
  • Use jstack para encontrar el código correspondiente por ID de hilo

jinfo

  • Ver los parámetros de jvm
jinfo -flags <pid># 查找出所有的参数

jstat

jstat -gc pid 1000 10# 评估gc 压力 每1秒输出,一共输出10

Inserte la descripción de la imagen aquí

  • S0C: el tamaño de la primera área de supervivencia, en KB
  • S1C: el tamaño de la segunda área de supervivencia
  • S0U: el tamaño utilizado de la primera área de supervivencia
  • S1U: el tamaño utilizado de la segunda área de supervivencia
  • EC: El tamaño de Eden Park
  • UE: Tamaño de uso de Eden Park
  • OC: tamaño de la vejez
  • OU: tamaño utilizado en la vejez
  • MC: tamaño del área del método (metaespacio)
  • MU: Tamaño del área de método utilizada
  • CCSC: tamaño del espacio de clase comprimido
  • CCSU: tamaño de uso del espacio de clase comprimido
  • YGC: Número de recolecciones de basura de generaciones jóvenes
  • YGCT: el tiempo consumido por la recolección de basura de la generación joven, en s
  • FGC: Número de recolecciones de basura en la vejez
  • FGCT: el tiempo consumido por la recolección de basura en la vejez, en s
  • GCT: tiempo total consumido por la recolección de basura, en s

También puede utilizar el parámetro ** - Xloggc: / Users / mac / Desktop / java learning / GC / gc-% t.log **

  • Ingrese el archivo en / Users / mac / Desktop / java learning / GC / gc-% t.log y use la herramienta gceasy para analizar el archivo gc
    Inserte la descripción de la imagen aquí

Estimación de la operación de JVM

Tasa de crecimiento de objetos jóvenes

  • Puede ejecutar el comando jstat -gc pid 1000 10 (ejecutar el comando una vez cada 1 segundo, un total de 10 veces), observando la UE (el uso del área de eden) para estimar cuántos objetos se agregan a eden por segundo , si la carga del sistema no es alta, puede cambiar la frecuencia de 1 segundo a 1 minuto o incluso 10 minutos para observar la situación general. Tenga en cuenta que el sistema general puede tener un período pico y un período diario, por lo que es necesario estimar la tasa de crecimiento del objeto en diferentes condiciones en diferentes momentos.

Frecuencia de activación de GC joven y requiere mucho tiempo cada vez

  • Al conocer la tasa de crecimiento de los objetos en la generación joven, podemos inferir la frecuencia con la que se activa Young GC en función del tamaño de la zona eden. El tiempo promedio de Young GC se puede calcular mediante la fórmula YGCT / YGC. Según los resultados, Probablemente podamos saber cuánto tiempo tardará el sistema. ¿Cuánto tiempo se atasca la ejecución de Young GC?

¿Cuántos objetos sobreviven a cada Young GC y entran en la vejez?

  • Esto se debe a que la frecuencia de Young GC probablemente se haya conocido antes. Si es cada 5 minutos, puede ejecutar el comando jstat -gc pid 300000 10 para observar los cambios en el uso de eden, survivor y vejez. Después de cada gc, eden El uso del área generalmente se reducirá en gran medida. Los supervivientes y la vejez pueden aumentar. Estos objetos aumentados son los objetos que sobreviven a cada Young GC. Al mismo tiempo, puedes ver cuántos objetos pasan a la vejez después de cada Young GC. , para que pueda calcular la tasa de crecimiento de los objetos en la vejez.

Frecuencia de activación de GC completa y requiere mucho tiempo cada vez

  • Conociendo la tasa de crecimiento de los objetos en la vejez se puede calcular la frecuencia de activación de la GC completa. Cada vez que se tarda en la GC completa se puede calcular utilizando la fórmula FGCT / FGC.

De hecho, la idea de optimización es simplemente intentar hacer que los objetos supervivientes sean menos del 50% del área de Superviviente después de que cada GC joven permanezca en la generación joven. Trate de que el sujeto no entre en la vejez. Intente reducir la frecuencia de la GC completa para evitar el impacto de la GC completa frecuente en el rendimiento de la JVM.

Documentación de Arthas

  • Vaya a la carpeta donde descargó Arthas y ejecute ./as.sh
  • Comando: panel de
    control Panel de entrada para ver el estado de ejecución de todo el proceso, subproceso, memoria, GC, información del entorno operativo:tablero
  • Detalles de vista de ID de proceso de hilo
  • hilo -b ver punto muerto

Combate real: la idea de resolver el retraso de GC completo

  • Si Full GC causado por metaspace
  • Si un gran número de objetos de "vida o muerte" han alcanzado la vejez.
    • Un GC joven a los objetos en el área de supervivientes, porque demasiados objetos en el área de supervivientes entrarán directamente en la vejez.
  • El mecanismo de garantía de espacio conduce a 2 GC completos
    • Dado que la memoria de la generación anterior es más pequeña que el tamaño de promoción promedio, un GC completo y luego un GC joven
    • Ascendido a la vejez después de GC joven, GC completo nuevamente
  • Si el gran objeto ha llegado a la vejez.

Supongo que te gusta

Origin blog.csdn.net/null_zhouximin/article/details/113099963
Recomendado
Clasificación