2012-02-15 14 views
6

Estoy utilizando Java 5 y nuestra aplicación de servidor personalizada necesita el ajuste de GC, ya que algunas veces estamos experimentando una pausa de 15-20 segundos en las horas punta. Estamos ejecutando Java 5 en una máquina de clase de servidor con argumentos de JVM como -server -d64¿Hay alguna manera de saber qué algoritmo de GC utiliza actualmente la JVM?

¿Hay alguna forma de saber qué algoritmo de GC está utilizando actualmente la JVM?

http://docs.oracle.com/javase/1.5.0/docs/guide/vm/gc-ergonomics.html

En las máquinas de tipo servidor que ejecuta el servidor de VM, el recolector de basura (GC) ha cambiado desde el colector de serie anterior (-XX:+UseSerialGC) a un colector paralelo (-XX:+UseParallelGC). Puede anular este valor predeterminado utilizando la opción de línea de comando -XX:+UseSerialGC para el comando java.

1) Quiero saber si realmente está pasando?

mi siguiente pregunta es me han añadido los siguientes comandos en argumentos de la línea

-verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -Xloggc:logs/gc.log

2) van a tener ningún rendimiento o comportamiento efecto en la JVM corriendo, excepto el registro registros GC?

Respuesta

0

Si el GC se está convirtiendo en un problema, le recomiendo que eche un vistazo a Java RTS (real-time system).

Java RTS le permite obtener un control preciso sobre cuándo funciona el GC. Lo que significa que tiene el control total del peor de los casos y, por lo tanto, puede simular cómo funcionará su sistema en condiciones estresantes.

5

puede utilizar - XX: + PrintFlagsFinal para imprimir los parámetros de JVM y su configuración.

java -XX: + PrintFlagsFinal -server -versión

1

Se puede utilizar para imprimir jmap -heap <jvm_pid> java resumen montón. Por ejemplo, resumen montón de IntelliJ es como la siguiente si corro el jmap -heap 2592:

Colocación de procesar ID 2592, por favor espere ...
depurador asociado éxito.
Se detectó el compilador del servidor.
La versión de JVM es 25.101-b13

utilizando hilos paralelos en la nueva generación.
utilizando thread-local asignación de objetos.
concurrente de marca y barrido GC
truncado ...

Como se puede ver desde la salida, la instancia JVM corriendo con 2592 Identificación del proceso está utilizando CMS algoritmo GC.

Además, si el algoritmo fue determinado por esos indicadores -XX:+Use*GC, puede encontrarlo usando el jcmd <pid> VM.flags. Por ejemplo:

$ jcmd 2715 VM.flags 
2715: 
-XX:CICompilerCount=4 -XX:InitialHeapSize=268435456 
-XX:MaxHeapSize=734003200 -XX:MaxNewSize=244318208 
-XX:MinHeapDeltaBytes=524288 -XX:NewSize=89128960 -XX:OldSize=179306496 
-XX:+UseCompressedClassPointers -XX:+UseCompressedOops 
-XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC 

Como se puede ver que la máquina virtual está utilizando el GC paralelo.

Cuestiones relacionadas