2020/2/17

GC優化步驟


  • 調優目標
    • GC時間足夠小
    • GC次數足夠少
    • Full GC週期足夠長
    • Full GC次數少
    • 移轉到老年代的對象少
  • 調優結果
    • 代碼減少使用全局變量和大對象
    • 調整新生代大小
    • 調整老年大大小
    • 選擇合適的GC收集器
  • 調優步驟
    1. 監控GC狀態
    2. 生成Dump文件
    3. 分析Dump文件
    4. 調整參數
  • 監控GC狀態
    • 開啟GC日誌(3選1)
      # -XX:+PrintGCDetails 
      # -XX:+PrintGCTimeStamps
      # -XX:+PrintGCDateStamps
    • 存放GC日誌檔
      # -Xloggc:/gc.log
    • 需注意之狀態
      • Minor時間超過50ms
      • Minor時間10秒內一次
      • Full GC時間超過1秒
      • Full GC時間10分鐘內一次
      • Full GC無效果
  • 生成Dump文件
    • 開啟OOM Dump文件
      # -XX:+HeapDumpOnOutOfMemoryError
    • 存放Dump文件 *.hprof
      # -XX:HeapDumpPath=D:\
  • 分析Dump文件 *.hprof
    • 中文開啟 .....jdk/bin/jvisualvm.exe
      # jvisualvm --locale zh:CN
    • D:\>Java\jdk1.8.0_241\bin\jvisualvm.exe  --locale zh:CN
    • 開啟dump文件 *.hprof

  • 調整參數
    • 其他參數
    • 減少GC次數
      • -Xmx = -Xms
      • -XX:newSize =  -XX:MaxNewSize
      • 提高閥值 -XX:MaxTenuringThreshold
        • 預設minor gc 達15次放入old區
    • 調整Old區
      • 觀察Old區之峰值 , 適當調高Young區 , 但會增加mior gc時間 , 關鍵字NewRatio
      • 硬體較好的設備可在Old區使用並行收集算法
        # -XX:+UseParallelOldPC 
    • 調整Stack
      • 每個線呈默認開啟 1M stack , 內存不變下可增加線呈數
    • 重複演練
  • 其他
    • 吞吐量優先的並行收集器與響應時間優先的併發收集器選擇

沒有留言:

張貼留言

test2