前幾天有某位伺服器內的大佬玩家推薦,才知道有ZGC這東西,
因為我對java開發及GC的機制一知半解,就不獻醜探討理論上的細節,
純粹分享資料以及實際應用在麥塊伺服器上的效果。
首先關於zgc的效能部份可以參考這份文件
http://cr.openjdk.java.net/~pliden/slides/ZGC-FOSDEM-2018.pdf
從文件的第6頁得知ZGC的停頓時間可以壓在10ms下,
而在第12頁中與G1GC比較的圖表,更能表現出他的效率之快。
(怕有版權問題就不截圖了,G1GC約在200~800ms之間浮動,資料越大停頓越久。)
要啟動ZGC的方法很簡單,只要是在Linux的環境且JAVA的版本在11以上,
然後於啟動伺服器的參數中加入
-XX:+UnlockExperimentalVMOptions -XX:+UseZGC
就可以運作了。
更多關於ZGC的資料可以參考OpenJDK的Wiki
https://wiki.openjdk.java.net/display/zgc/Main
最後這是我幾周前用G1GC的Timing,
https://timings.aikar.co/?id=489d8729e6db4ac0b9e1a4b9fc9f3337
https://i.imgur.com/6JUK5DV.png
啟動參數
-server -Xms15G -Xmx15G -XX:+UseG1GC -XX:ParallelGCThreads=12
-XX:+UseLargePages
然後是換成ZGC後的TIming
https://timings.aikar.co/?id=20788f4069cb4ac09785bc6e5c2d6d04
https://i.imgur.com/1dvw8sB.png
啟動參數
-server -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -Xmx15G
雖然前後有升級過PaperMC的版本,且Timing沒有蒐集GC回收時間的細節,
不算嚴謹的實驗,但整體而言TPS還是穩定了不少。
以上,把這好物推薦給大家~