1 clasificación de parámetros de HotSpot
> Estándar: -Al principio, todo el soporte de HotSpot
> No estándar: comience con -X, las versiones específicas de HotSpot admiten comandos específicos
> Inestable: comience con -XX, la próxima versión puede cancelarse
java -X ver parámetros estándar
2 Comprender los parámetros de JVM a través de experimentos
clase pública HelloGC {
public static void main (String [] args) {
System.out.println ("¡HolaGC!");
Lista lista = nueva LinkedList ();
por(;;) {
byte [] b = nuevo byte [1024 * 1024];
list.add (b);
}
}
}
2.1 Compilar javac HelloGC.java
2.2 java -XX: + PrintCommandLineFlags HelloGC
2.3 java -Xmn10M -Xms40M -Xmx60M -XX: + PrintCommandLineFlags -XX: + PrintGC HelloGC
Establecer el tamaño de la generación joven: -Xmn10M
Establecer el tamaño de pila mínimo: -Xms40M
Establecer el tamaño máximo de pila: -Xmx60M
Imprimir información de GC: + PrintGC
Puede ver que el GC aquí se refiere a YGC, pero también a la información de Full GC.
2.4 java -Xmn10M -Xms40M -Xmx60M -XX: + PrintCommandLineFlags -XX: + PrintGCDetails -XX: + PrintGCTimeStamps HelloGC
Establecer detalles de impresión GC: + PrintGCDetails
Establezca la marca de tiempo cuando se produce el CG impreso enviado por impresión: + PrintGCTimeStamps
2.5 java -XX: + UseConcMarkSweepGC -XX: + PrintCommandLineFlags HelloGC
Configure el recolector de basura antiguo como: CMS
2.6 java -XX: + UseConcMarkSweepGC -XX: + PrintCommandLineFlags -XX: + PrintGC HelloGC
2.7 java -XX: + UseConcMarkSweepGC -XX: + PrintCommandLineFlags -XX: + PrintGCDetails HelloGC
2.8. Java -XX: + PrintFlagsInitial valores de parámetro predeterminados
2.9. Java -XX: + PrintFlagsFinal valor del parámetro final
para resumir:
eden space 5632K, 94% usado [0x00000000ff980000,0x00000000ffeb3e28,0x00000000fff00000)
La siguiente dirección de memoria se refiere a la dirección inicial, la dirección final del espacio utilizado y la dirección final del espacio total.
1. Rendimiento: tiempo de código de usuario / (tiempo de ejecución del código de usuario + tiempo de recolección de basura)
2. Tiempo de respuesta: cuanto más corto sea el STW, mejor será el tiempo de respuesta.
problema:
Cálculos científicos, rendimiento. Minería de datos, rendimiento. Prioridad de rendimiento general: (PS + PO)
Tiempo de respuesta: API de GUI del sitio web (1.8 G1)
3 Establecer parámetros de registro
-Xloggc: /opt/xxx/logs/xxx-xxx-gc-%t.log -XX: + UseGCLogFileRotation -XX: NumberOfGCLogFiles = 5 -XX: GCLogFileSize = 20M -XX: + PrintGCDetails -XX: + PrintGCDateStamps -XX: + PrintGCCause
Caso:
1. Hay un sitio web de datos de 500.000 PV (extracción de documentos del disco a la memoria) servidor original de 32 bits, 1,5G
Los comentarios de los usuarios de que el sitio web es relativamente lento, por lo que la empresa decidió actualizar, el nuevo servidor es de 64 bits, 16G
Como resultado, los usuarios comentan que el retraso es muy serio, pero la eficiencia es menor que antes.
1. ¿Por qué el sitio web original es lento?
Muchos usuarios buscan datos, se cargan muchos datos en la memoria, memoria insuficiente, GC frecuente, STW largo, tiempo de respuesta lento
2. ¿Por qué está más rezagado?
Cuanto mayor sea la memoria, mayor será el tiempo de FGC
3. ¿Qué hacer?
PS -> PN + CMS o G1
2. La CPU del sistema suele estar al 100%, ¿cómo ajustarla?
Si la CPU está al 100%, entonces debe haber subprocesos que ocupen recursos del sistema,
1. Descubra qué proceso tiene una CPU alta (arriba)
2. ¿Qué subproceso en el proceso tiene alta CPU (top -Hp)?
3. Exportar la pila del hilo (jstack)
4. Encuentre qué método (marco de pila) consume tiempo (jstack)
5. Alta proporción de subprocesos de trabajadores | alta proporción de subprocesos de recolección de basura
3. La memoria del sistema es tan alta, ¿cómo encontrar el problema? (Frecuencia de la entrevista)
1. Exportar memoria de pila (jmap)
2. 分析 (jhat jvisualvm mat jprofiler ...)
4. Cómo monitorear JVM
1. jstat jvisualvm jprofiler arthas top ...