[Java] Guía de configuración de JVM GC

1. Versión JDK

Todas las siguientes optimizaciones se basan en JDK8la versión. Se recomienda encarecidamente actualizar a la versión inferior JDK8y utilizar update_191la última versión tanto como sea posible.

2. Cómo elegir un recolector de basura

Aplicación de respuesta primero: para las aplicaciones del lado C que son sensibles al tiempo de respuesta, se recomienda elegir G1 si la memoria del montón es más de 8G y elegir CMS si la memoria del montón es pequeña o la versión de JDK es baja;

Aplicación de prioridad de rendimiento: se recomienda seleccionar aplicaciones que no sean sensibles al tiempo de respuesta y apunten a un alto rendimiento (como MQ y Worker) ParallelGC;

3. Optimizar parámetros de cada colector

1) Configuración de parámetros básicos (requerida para todas las aplicaciones y todos los colectores):

-Xmx(一般为容器内存的50%)

-Xms(与Xmx一致)

-XX:MetaspaceSize(通常256M~512M)

-XX:ParallelGCThreads=容器核数

-XX:CICompilerCount=容器核数(必须大于等于2)

2)ParallelGC

Además de los parámetros anteriores, generalmente no se requieren ajustes adicionales (colector predeterminado JDK8)

3)CMS

-XX:+UseConcMarkSweepGC

-Xmn (一般为堆内存的三分之一),尤其是配置了ParallelGCThreads后必须配置此参数

-XX:ConcGCThreads=n(默认为ParallelGCThreads/4,可视情况调整至ParallelGCThreads/2)

-XX:+UseCMSInitiatingOccupancyOnly

-XX:CMSInitiatingOccupancyFraction=70(推荐值)

4)G1

-XX:+UseG1GC

-XX:ConcGCThreads=n(默认为ParallelGCThreads/4,可视情况调整至ParallelGCThreads/2)

-XX:G1HeapRegionSize=8m(若堆内存在8G以内且有较多大对象推荐设置此值)

*Tenga cuidado de no configurar -Xmn y XX:NewRatio

5) Otros parámetros de ajuste

-XX:+ParallelRefProcEnabled Si Referenceel tiempo de procesamiento de GC es largo, por ejemplo, WeakReferencese utiliza una gran cantidad de objetos, se puede habilitar el procesamiento paralelo a través de este parámetro

4. Encienda el registro del GC

-XX:+PrintGCDetails

-XX:+PrintGCDateStamps

-Xloggc:/export/Logs/gc.log

5. Cómo juzgar si el GC es normal

1) GC Si es frecuente: YoungGC la frecuencia es generalmente una décima de segundo, FullGCgeneralmente varias veces al día, y G1el colector no debe aparecer FullGC;

2) GCConsumo de tiempo: el consumo de tiempo depende principalmente del tamaño de la memoria del montón y la cantidad de objetos basura. YoungGCEl tiempo suele ser decenas de milisegundos, FullGCnormalmente cientos de milisegundos;

3) Si la memoria del GC cae cada vez: cuando la aplicación acaba de iniciarse, YoungGCla memoria debe reciclarse a un nivel de agua más bajo cada vez. A medida que pasa el tiempo, la generación anterior aumentará gradualmente y el nivel de agua de la memoria aumentará gradualmente. hasta que la FullGC/MixedGC(G1)memoria regrese al nivel de agua más bajo nuevamente. De lo contrario, puede haber una pérdida de memoria;

4) Si se usa ParallelGC, solo se activará cuando se agote la memoria del montón FullGC, por lo que no es necesario configurar la alarma de uso de la memoria del montón, pero debe prestar atención a GCla frecuencia;

Supongo que te gusta

Origin blog.csdn.net/ihero/article/details/132212049
Recomendado
Clasificación