2016-11-29 3 views
4

My JAVA_OPTS optimieren istWie G1 der Pause Zeit

-server -Xms4g -Xmx4g -XX:MaxMetaspaceSize=384m -Xmn2g -Xloggc:/home/admin/logs/gc.log 
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseG1GC -XX:MaxGCPauseMillis=300 

Ich bin zufrieden mit der Frequenz von Full GC, und die Zeitspanne zwischen zwei GCs ist 5 Stunden oder länger. Einer von Full GCs' log ist:

2016-11-29T03:59:18.009+0800: 385603.123: [Full GC (Allocation Failure) 4066M->1197M(4096M), 2.5124454 secs] 
    [Eden: 0.0B(2048.0M)->0.0B(2048.0M) Survivors: 0.0B->0.0B Heap: 4066.4M(4096.0M)->1197.1M(4096.0M)], [Metaspace: 168228K->167780K(1206272K)] 
[Times: user=3.24 sys=0.00, real=2.52 secs] 

der Full GC von G1 Stop-The World ist? Wenn ja, ist die Pausenzeit länger als 1 Sekunde, was nicht akzeptabel ist. Wie zu optimieren?

+0

Versuchen Sie die Einstellung -XX: InitiatingHeapOccupancyPercent = 70, es ist der Standardwert von 45% der Heapbelegung, was möglicherweise dazu führt, dass GC zu früh voll wird. –

+0

@fn. PS: Ich bin mit der Häufigkeit von Full GC zufrieden und die Zeitspanne zwischen zwei GCs beträgt 5 Stunden oder länger. Ich betrachte die Länge der Pausenzeit. – yichudu

+1

Vollständige GCs sollten mit G1 überhaupt nicht vorkommen, betrachten sie als einen weichen Fehlermodus. Gleichzeitige Zyklen/gemischte Sammlungen sollten die Arbeit die ganze Zeit erledigen. Laden Sie ein vollständiges GC-Log irgendwo hoch oder analysieren Sie es selbst mit [gcviewer] (https://github.com/chewiebug/GCViewer) – the8472

Antwort

1

-Xmn2g ist Konflikt mit -XX:MaxGCPauseMillis=300.

G1 wird die Größe der neuen Generation dynamisch anpassen.

Sie sollten nur die -Xmn2g löschen.