1. 程式人生 > >GC調優實戰

GC調優實戰

1.怎麼調優

         調優的一般步驟:①首先收集gc日誌,②分析日誌中的關鍵效能指標,③分析GC原因,調優JVM引數。

         衡量GC的兩個指標:①吞吐量 ②響應時間。理想情況下是高吞吐量,低響應時間,但現實往往兩個引數是相悖的。

         高吞吐量適合場景:科學計算,後臺處理等弱互動場景。

         高響應時間適合場景:對響應時間有要求的場景。

         GC分析工具:

            ①gceasy,線上使用。

2.G1垃圾回收器

       1.1 初始引數設定

PARALLEL_OPTION="-xx:+UseParallelGC -XX:+UseParalleloldGC -XX:MaxGCPauseMills=100 -XX:GCTimeRatio=99 -XX:YoungGenerationSizeIncrement=30"

CMS_OPTION="-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=92 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=5"

G1_OPTION="-xx:+UseG1GC -Xms128M -Xmx128 -XX:MetaspaceSize=64M -XX:MaxGCPauseMillis=100 -XX:+UseStringDeduplication -XX:StringDeduplicationAgeThreshold=3"

JAVA_OPTS="$JAVA_OPTS  -XX:+UseG1GC  -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CATALINA_HOME/logs/ -XX:+PrintGCDetails  -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -Xloggc:$CATALINA_HOME/logs/gc.log -XX:+PrintHeapAtGC  -XX:+PrintTenuringDistribution"

2.2 垃圾回收結果:

我們可以看到吞吐量99.76, 最小停頓時間0.00004s,最大停頓時間0.03549s,平均停頓時間0.0007s,GC13次

我們要做的事情:調整Metadata,tenured heap21M,

修改JAVA_OPTS:

JAVA_OPTS="$JAVA_OPTS  -XX:+UseG1GC -XX:MetaspaceSize=50M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CATALINA_HOME/logs/ -XX:+PrintGCDetails  -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -Xloggc:$CATALINA_HOME/logs/gc.log -XX:+PrintHeapAtGC  -XX:+PrintTenuringDistribution"

(2)第二次:

我們可以看到吞吐量99.8, 最小停頓時間0.00004s,最大停頓時間0.03446s,平均停頓時間0.00049s,GC7次

(3)這次我們調整初始堆大小

JAVA_OPTS="$JAVA_OPTS  -XX:+UseG1GC -XX:MetaspaceSize=50M -Xms128M -Xms128M -XX:MaxGCPauseMillis=100 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CATALINA_HOME/logs/ -XX:+PrintGCDetails  -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -Xloggc:$CATALINA_HOME/logs/gc.log -XX:+PrintHeapAtGC  -XX:+PrintTenuringDistribution"

我們可以看到吞吐量99.74, 最小停頓時間0.00003s,最大停頓時間0.02183s,平均停頓時間0.00055s,GC10次。