2012-02-15 8 views
6

Sto usando Java 5 e la nostra applicazione server personalizzata ha bisogno di tuning in GC, poiché alcune volte abbiamo una pausa di 15-20 secondi nelle ore di punta. Stiamo eseguendo Java 5 su una macchina server class con argomenti JVM come -server -d64C'è un modo per sapere quale algoritmo GC sta correntemente usando la JVM

C'è un modo per dire quale algoritmo GC sta attualmente utilizzando la JVM?

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

Su macchine di classe server che eseguono il server VM, il garbage collector (GC) è cambiato dal collettore di serie precedente (-XX:+UseSerialGC) ad un collettore parallelo (-XX:+UseParallelGC). È possibile sovrascrivere questo valore predefinito utilizzando l'opzione da riga di comando -XX:+UseSerialGC per il comando java.

1) Voglio sapere che sta succedendo davvero?

mia prossima domanda è ho aggiunto il seguente comando AT argomenti della riga

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

2) si hanno tutte le prestazioni o l'effetto del comportamento sulla JVM in esecuzione ad eccezione di registrazione log GC?

risposta

0

Se il GC sta diventando un problema, consiglierei di dare un'occhiata a Java RTS (real-time system).

Java RTS consente di ottenere un controllo preciso su quando il GC funziona. Ciò significa che hai il completo controllo dello scenario del caso peggiore e, quindi, puoi simulare il modo in cui il tuo sistema funzionerà nella condizione stressante possibile.

1

È possibile ottenere il corrente gc (s) in uso utilizzando il GarbageCollectorMXBeans.

E praticamente tutte le registrazioni hanno un impatto sulle prestazioni.

5

è possibile utilizzare - XX: + PrintFlagsFinal per stampare i parametri JVM e le loro impostazioni.

java -XX: + PrintFlagsFinal -server -version

1

È possibile utilizzare jmap -heap <jvm_pid> per stampare java sintesi mucchio. Ad esempio, sintesi mucchio di IntelliJ è simile al seguente se corro il jmap -heap 2592:

Collegamento per elaborare ID 2592, si prega di attendere ...
debugger successo.
Rilevato compilatore server.
La versione JVM è 25.101-b13

utilizzando thread paralleli nella nuova generazione.
utilizzando l'allocazione oggetto locale thread- .
Concurrent Mark-sweep GC
troncato ...

Come è possibile individuare dall'output, l'istanza JVM in esecuzione con 2.592 processo id sta usando CMS algoritmo GC.

Inoltre, se l'algoritmo è stato determinato da quei flag -XX:+Use*GC, è possibile trovarlo utilizzando jcmd <pid> VM.flags. Per esempio:

$ 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 

Come si può vedere che la macchina virtuale utilizza il GC parallela.

Problemi correlati