Ajuste de JVM: parámetros comunes de CMS, cálculo de subprocesos y configuración recomendada

Lista de parámetros comunes

-XX:+UsarConcMarkSweepGC

Encienda el colector CMS GC. JVM usaba Parallel GC de forma predeterminada antes de 1.8 y G1 GC después de 9.

-XX:UsarParNuevoGC

Cuando se usa el recopilador de CMS, de forma predeterminada, la generación joven usa varios subprocesos para realizar la recolección de elementos no utilizados en paralelo (está habilitado de manera predeterminada cuando UseConcMarkSweepGC está habilitado).

-XX:+CMSParallelRemarkHabilitado

Utilice el marcado paralelo para reducir las paradas (activado de forma predeterminada).

-XX:+CMSConcurrentMTEnabled

Cuando está habilitado, las fases de CMS simultáneas se ejecutarán en varios subprocesos (por lo tanto, varios subprocesos de GC funcionarán en paralelo con todos los subprocesos de la aplicación). (habilitado por defecto)

-XX:ConcGCHilos

Define el número de subprocesos en los que se ejecutan procesos de CMS simultáneos.

-XX: subprocesos de GC paralelos

Define el número de subprocesos para la recopilación paralela por parte del proceso CMS.

-XX:CMSInitiatingOccupancyFraction

Este valor representa la tasa de uso del espacio de almacenamiento dinámico de la generación anterior y el valor predeterminado es 68. Cuando la tasa de uso de la generación anterior alcance este valor, el recopilador paralelo comenzará a recolectar elementos no utilizados. Este parámetro debe usarse junto con UseCMSInitiatingOccupancyOnly, y no es válido configurarlo solo.

-XX:+UsarCMSIniciandoOcupaciónSolo

Después de habilitar este parámetro, el parámetro CMSInitiatingOccupancyFraction surtirá efecto. Deshabilitado por defecto.

-XX:+CMSClassDescarga Habilitado

En comparación con el recopilador paralelo, el recopilador de CMS no realiza la recolección de elementos no utilizados en la generación permanente de forma predeterminada. Si desea recolectar basura de la generación permanente, puede establecer -XX:+CMSClassUnloadingEnabled. Deshabilitado por defecto.

-XX:+CMSIModoIncremental

Activa el modo incremental del recopilador de CMS. El modo incremental hace que el proceso de recolección sea más largo, pero los tiempos de pausa tienden a ser más cortos. Deshabilitado por defecto.

-XX:CMSFullGCsBeforeCompaction

Establezca cuántas veces realizar Full GC para comprimir el espacio de memoria, el valor predeterminado es 0.

-XX:+CMSScavengeBeforeComentario

Haga un comentario ygc antes de cms gc para reducir la cantidad de objetos escaneados por gc roots, mejorando así la eficiencia del comentario, y está deshabilitado de manera predeterminada.

-XX:+ExplicitGCInvokesConcurrent

Después de habilitar este parámetro, siempre que la JVM llame al GC del sistema, ejecutará CMS GC en lugar de Full GC.

-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses

Este parámetro asegura que cuando hay una llamada de GC del sistema, la generación permanente también se incluye en el alcance de la recolección de elementos no utilizados de CMS.

-XX:+Deshabilitar GC explícito

Este parámetro hará que la JVM ignore por completo las llamadas de GC del sistema (independientemente del tipo de recopilador utilizado).

-XX:+UsarComprimidoVaya

Este parámetro se usa para comprimir datos de objetos de clase para mejorar la utilización de la memoria. (habilitado por defecto)

-XX:MaxGCPauseMillis=200

Este parámetro se usa para configurar el tiempo de espera de la pausa del GC en milisegundos, no lo configure demasiado bajo.

La fórmula para calcular el número de subprocesos en CMS

Para distinguir el número de subprocesos gc parnew en el área joven y el número de subprocesos cms en el área antigua, son los siguientes dos parámetros:

  • -XX:ParallelGCThreads=m // La cantidad de subprocesos de GC utilizados cuando STW está en pausa, generalmente CPU completa
  • -XX:ConcGCThreads=n // El número de subprocesos GC utilizados cuando los subprocesos GC y los subprocesos comerciales se ejecutan simultáneamente, generalmente más pequeños

ParallelGCThreadsParallelGCThreads

El valor predeterminado del parámetro ParallelGCThreads es:

  • Si el número de núcleos de CPU <= 8, entonces ParallelGCThreads=Número de núcleo de CPU, por ejemplo, mi computadora anterior es 4
  • Si el número de núcleos de CPU > 8, entonces ParallelGCThreads = número de núcleos de CPU * 5/8 + 3 redondeado hacia abajo
  • En el caso de 16 núcleos, ParallelGCThreads = 13
  • En el caso de 32 núcleos, ParallelGCThreads = 23
  • En el caso de 64 núcleos, ParallelGCThreads = 43
  • En el caso de 72 núcleos, ParallelGCThreads = 48

Subprocesos ConcGC

El valor predeterminado de ConcGCThreads es:

ConcGCThreads = (ParallelGCThreads + 3)/4 redondeado hacia abajo.

  • ParallelGCThreads = 1~4 elementos, ConcGCThreads = 1
  • ParallelGCThreads = 5~8 hilos, ConcGCThreads = 2
  • ParallelGCThreads = 13~16 hilos, ConcGCThreads = 4

Configuración recomendada

Configuración de parámetros bajo 8C16G

En resumen, bajo 8C16G, se recomienda utilizar la siguiente configuración de parámetros:

-Xmx12g -Xms12g
-XX:ParallelGCThreads=8
-XX:ConcGCThreads=2
-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
-XX:+CMSIncrementalMode
-XX:+CMSScavengeBeforeRemark
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=70
-XX:CMSFullGCsBeforeCompaction=5
-XX:MaxGCPauseMillis=100  // 按业务情况来定
-XX:+ExplicitGCInvokesConcurrent
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps

Configuración de parámetros bajo 4C8G

Si está bajo la configuración 4C8G, se recomienda

-Xmx6g -Xms6g
-XX:ParallelGCThreads=4
-XX:ConcGCThreads=1
// 其他不变。。。。

Configuración de parámetros bajo 2C4G

Si está bajo la configuración 2C4G, se recomienda

-Xmx3g -Xms3g
-XX:ParallelGCThreads=2
-XX:ConcGCThreads=1
// 其他不变。。。。

Supongo que te gusta

Origin blog.csdn.net/agonie201218/article/details/131842634
Recomendado
Clasificación