垃圾回收器的暫停問題對實時響應要求較高的服務來說,一直是個痛點, CMS和G1等主流垃圾回收器的數十毫秒乃至上百毫秒的暫停時間相當致命。此外,調優門檻也相對較高,需要對垃圾回收器的內部機制有一定的了解,才能夠進行有效的調優。隨著ZGC的出現, 使得這一痛點徹底解決, ZGC 最初在 JDK 11 中作為實驗性功能引入,并在 JDK 15 中宣布為生產就緒, 由于 JDK17 才是比較正式提供給大眾實用的LTS支持版本,而且一部分公司已經在使用,所以本文力推 JDK17。
ZGC 作為一款低延遲垃圾收集器,旨在滿足以下目標:
低延遲的業務需求,毫秒級耗時的 GC
據美團的開發說:
在 Zeus 服務不同集群中,ZGC 在低延遲(TP999 < 200ms)場景中收益較大:
可以忽略的升級 JDK17 的理由:
暫不推薦場景:定時任務、批量任務、高 CPU 密集型應用。
話不多說,先看效果。
環境:
CPU:4cMem: 6GB
G1 參數:
-Xmx3500m -Xms3500m -XX:+UseG1GC -XX:MaxGCPauseMillis=100-XX:G1ReservePercent=10 -XX:ConcGCThreads=2 -XX:ParallelGCThreads=5-XX:G1HeapRegionSize=16m -XX:MaxTenuringThreshold=14-XX:SurvivorRatio=8
ZGC 參數:
--add-opens=java.base/java.lang=ALL-UNNAMED -Xms3500m -Xmx3500m -XX:ReservedCodeCacheSize=256m -XX:InitialCodeCacheSize=256m -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -XX:ConcGCThreads=1 -XX:ParallelGCThreads=3 -XX:ZCollectionInterval=60 -XX:ZAllocationSpikeTolerance=4 -XX:+UnlockDiagnosticVMOptions -XX:-ZProactive -Xlog:safepoint,classhisto*=trace,age*,gc*=info:file=/opt/gc-%t.log:time,tid,tags:filecount=5,filesize=50m
上述兩個參數,均已經在生產環境實驗過, 生產環境的機器是單機擁有 1500 業務 tps 的機器。
圖片
從上圖可見, GC 耗時是有著質的區別的,這個區別是你用 CMS、Parallel GC、 G1 等嘔心瀝血也調校不出來的。
這么短的GC, 可以保證,應用因為JVM層面的卡頓都保持在 1ms 以內, 這也是為啥說這點才是不能拒絕的理由。
從 CPU 使用上看, JDK17 相同的代碼, 比 JDK8 要高出 10 ~ 20%
使用 JDK17 前必須要安裝 JDK17, 對于不同的 Linux 發行版或者操作系統安裝方法各不相同, 下面給出了一些樣例, 僅供參考。
# ubuntu 安裝jdk17sudo apt install openjdk-17-jdk# docker 基礎鏡像docker pull openjdk:17-slimdocker pull openjdk:17-jdk-oraclelinux7FROM openjdk:17-slim
有了 JDK17 后,已經具備了讓你的 Java 程序運行在 JDK17 上的基本條件了,下一步便是配置 JVM 參數如下(有需要的話,可以自行把換行整理下):
--add-opens=java.base/java.lang=ALL-UNNAMED /-Xms1500m -Xmx1500m /-XX:ReservedCodeCacheSize=256m /-XX:InitialCodeCacheSize=256m / -XX:+UnlockExperimentalVMOptions /-XX:+UseZGC /-XX:Cnotallow=1 -XX:ParallelGCThreads=2 /-XX:ZCollectinotallow=30 -XX:ZAllocatinotallow=5 /-XX:+UnlockDiagnosticVMOptions -XX:-ZProactive /-Xlog:safepoint,classhisto*=trace,age*,gc*=info:file=/opt/gc-%t.log:time,tid,tags:filecount=5,filesize=50m /-XX:+HeapDumpOnOutOfMemoryError /-XX:HeapDumpPath=/opt/errorDump.hprof
圖片
本文鏈接:http://www.tebozhan.com/showinfo-26-91523-0.html新項目為什么建議你使用 JDK17,一文告訴你升級的方法和不可拒絕的理由!
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 有人問我架構圖、流程圖為什么這么好看?
下一篇: 服務失敗后如何重試?你學會了嗎?