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
// 其他不变。。。。