經過壓力測試查看xwiki的gc狀況,統計分析gc日誌,在不改變總內存使用的狀況下作出合理調整,經過壓力測試聚合報告對比調優效果。web
虛擬機 CPU 8核,內存 8G 操做系統 CentOS6.5 JDK: 1.7jvm
運行web工具
-Xmx512m -XX:MaxPermSize=196m -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$LOGSDIR/xwiki.gc -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${LOGSDIR}測試
總內存:512 + 196 = 708M操作系統
jstatd + jvisualVM實時:線程
GCViwer:日誌
統計分析GC日誌: awk '{print $5,$6}' target.0 | awk -F'(' '{print $1,$2}' | awk '{print $1,$3}' | awk -F'->' '{print $1,$2,$3}' | awk -F'K' '{print $1,$2,$3,$4}' | awk '{print ($3-$4)/$1}' | awk '{sum+=$1} END{print sum/NR}' 平均年輕代的回收率爲72%, 最差的回收率也基本大於65% 平均每次young GC 堆回收的內存空間爲95M, 溢出到老年代的空間爲16M 分析full gc每次的存活對象空間大概在170M左右對象
設置老年代大小爲170M × 1.5 = 255M 新生代設置爲170M × 2 = 340M圖片
根據回收率計算Eden和Survivor的比例 設eden空間大小爲E 設survivor大小爲S 則有: E+2*S=340; S/S+E=0.35; -- 假設年輕代回收率爲65% 計算得,E:S=1.8:1 則取值2:1內存
eden:survivor = 2:1
堆空間255+340=595M 永久代 708 - 595 = 113M
-Xmx595M -Xms595M -XX:NewSize=340M -XX:MaxNewSize=340M -XX:SurvivorRatio=2 -XX:PermSize=113M -XX:MaxPermSize=113M -XX:-UseAdaptiveSizePolicy -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$LOGSDIR/xwiki.gc -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${LOGSDIR}
jvisualVM:
gcviewer:
10線程,每線程1000次