Aprendizaje de JVM (3) Parámetros de ajuste comunes

Configuración de tamaño de montón

Análisis de ejemplo 1

java -Xmx3550m -Xms3550m -Xmn2g -Xss128k

-Xms (establece el tamaño inicial de almacenamiento dinámico de Java) -Xmx (establece el tamaño máximo de memoria de almacenamiento dinámico de Java) -Xss (el tamaño de pila ocupado por un solo subproceso) -Xmn (el tamaño de la generación joven)

  1. -Xms y -Xmx tienen el mismo valor, entonces la inicialización es limitar el tamaño máximo de memoria de java
  2. Establecemos el tamaño máximo aquí y el tamaño de la generación joven, luego el tamaño de memoria restante definitivamente tendrá un impacto en la vejez

Análisis de ejemplo 2

-XX: NewRatio = 4 -XX: SurvivorRatio = 4 -XX: MaxPermSize = 16m -XX: MaxTenuringThreshold = 0

-XX: NewRatio = 4: Establece la relación de tamaño del área de Eden y el área de Survivor en la generación joven. Establecido en 4, la proporción de dos distritos sobrevivientes a un distrito Eden es 2: 4, un distrito sobreviviente representa 1/6 de toda la generación joven -XX: MaxPermSize = 16m: configuración (incluidos Eden y dos distritos sobrevivientes) y año La relación de la generación anterior (excluyendo la generación permanente). Establecido en 4, la relación entre la generación joven y la generación anterior es de 1: 4, y la generación joven ocupa 1/5 de toda la pila -XX: SurvivorRatio = 4: establece el tamaño de la generación persistente en 16 m. -XX: MaxTenuringThreshold establece el número de generaciones después del reciclaje a la generación anterior

La elección del reciclador.

La JVM ofrece tres opciones: colector en serie, colector en paralelo y colector concurrente, pero el colector en serie solo es adecuado para pequeños volúmenes de datos, por lo que la opción aquí es principalmente para el colector en paralelo y el colector concurrente. De forma predeterminada, JDK5.0 usaba colectores en serie anteriormente. Si desea usar otros colectores, debe agregar los parámetros correspondientes al inicio. Después de JDK5.0, JVM juzgará de acuerdo con la configuración actual del sistema.

Rendimiento-primer colector paralelo

Análisis de ejemplo 1

java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX: + UseParallelGC -XX: ParallelGCThreads = 20

-XX: + UseParallelGC: seleccione el recolector de basura como el recolector paralelo. Esta configuración solo es válida para la generación joven. En la configuración anterior, la generación joven usa la colección concurrente, mientras que la generación anterior todavía usa la colección en serie. -XX: ParallelGCThreads = 20: configura el número de subprocesos del recopilador paralelo, es decir: cuántos subprocesos se recolectan simultáneamente. Este valor se configura mejor igual al número de procesadores.

Análisis de ejemplo 2

java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX: + UseParallelGC -XX: ParallelGCThreads = 20 -XX: + UseParallelOldGC

-XX: + UseParallelOldGC: Configure el método de recolección de basura de la generación anterior como recolección paralela. JDK6.0 admite la recopilación paralela de generaciones antiguas y antiguas.

Análisis de ejemplo 3

java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX: + UseParallelGC -XX: MaxGCPauseMillis = 100 -XX: + UseAdaptiveSizePolicy

-XX: + UseAdaptiveSizePolicy: después de configurar esta opción, el colector paralelo seleccionará automáticamente el tamaño del área de generación joven y la proporción de área de Superviviente correspondiente para lograr el tiempo mínimo correspondiente o la frecuencia de recolección especificada por el sistema de destino. Este valor se recomienda cuando se usa un colector paralelo , Siempre abierto.

Colector concurrente con prioridad en el tiempo de respuesta

Análisis de ejemplo 1

java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX: ParallelGCThreads = 20 -XX: + UseConcMarkSweepGC -XX: + UseParNewGC

-XX: + UseConcMarkSweepGC: establece la generación anterior para la recopilación simultánea.

Análisis de ejemplo 2

java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX: + UseConcMarkSweepGC -XX: CMSFullGCsBeforeCompaction = 5 -XX: + UseCMSCompactAtFullCollection

-XX: CMSFullGCsBeforeCompaction: debido a que el recopilador concurrente no comprime ni organiza el espacio de memoria, se producirá "fragmentación" después de un período de tiempo, lo que reduce la eficiencia de la operación. Este valor establece cuántas veces se ejecuta el GC para comprimir y organizar el espacio de memoria. -XX: + UseCMSCompactAtFullCollection: activa la compresión de la generación anterior. Puede afectar el rendimiento, pero puede eliminar la fragmentación

Información auxiliar

-XX: + PrintGC: print GC 

 -XX: + PrintGCDetails: información más detallada 

 -XX: + PrintGCApplicationStoppedTime: la hora en que se detuvo el programa durante la recolección de basura de impresión. 

 -Xloggc: nombre de archivo: se utiliza junto con lo anterior para registrar información de registro relacionada en un archivo para su análisis.

Por ejemplo, un ejemplo de uso:

[root @ xx jvm 测试] # java -XX: + PrintGCDetails -Xloggc: jvmLog.txt DynamicDispatch 
hombre dice hola 
mujer dice hola 
mujer dice hola 

[root @ xx jvm 测试] # ls 
'DynamicDispatch $ Human.class' 'DynamicDispatch $ Woman .class 'DynamicDispatch.java hs_err_pid14941.log StaticResolution.class 
' DynamicDispatch $ Man.class 'DynamicDispatch.class hello.jar jvmLog.txt StaticResolution.java 

[root @ xx jvm 测试] # vim jvmLog.txt

Suplemento

Cómo analizar registros de GC

Registros de GC jóvenes: 1297993-20200415144935978-1256825494.png

Registro completo de GC:

1297993-20200415144953890-141586730.png

Resumen de ajuste

Los parámetros de ajuste de jvm provienen principalmente de los siguientes aspectos:

  • Ajuste de configuración de montón
  • Selección de colector paralelo en serie

Referencias

  • https://www.iteye.com/blog/unixboy-174173 (debe ver)
  • https://www.one-tab.com/page/l6WE1xp_TDyEN5iQNVyOEA

Supongo que te gusta

Origin www.cnblogs.com/Benjious/p/12705275.html
Recomendado
Clasificación