?? 方式一:分支并行升級(jí)
- 在 Git 建立 upgrade-java17 分支。
- 改 pom.xml,換 JVM,升級(jí)依賴。
- 用 SonarQube/SpotBugs 全面掃一次代碼,修復(fù)反射、SPI 等老舊實(shí)現(xiàn)。
- 跑單測(cè),逐步跑集成測(cè)試(接口、支付、庫(kù)存、發(fā)貨、消息隊(duì)列)。
- 找非核心接口灰度上線一部分流量驗(yàn)證。
?? 方式二:分模塊切換
- 如果是模塊化商城(用戶中心、支付中心、商品中心、訂單中心),可以先把非核心的邊緣服務(wù)先換 JVM。
- 保證核心服務(wù)先別動(dòng),逐步上線。
?? 常見(jiàn)灰度坑
- 分布式 Session、序列化(Kryo、Jackson)要兼容老版本客戶端。
- 消息隊(duì)列(Kafka/RabbitMQ)中序列化數(shù)據(jù)格式要保證向后兼容。
?? 5?? 檢查與調(diào)優(yōu)
? JVM 參數(shù):
- -XX:+UseG1GC(默認(rèn))
- 如果需要低延遲: bash復(fù)制編輯-XX:+UnlockExperimentalVMOptions -XX:+UseZGC
? 監(jiān)控:
- JFR(Java Flight Recorder)在 Java 11+ 更好用了,替換老的 jstat、jvisualvm。
- 加強(qiáng) Prometheus + Grafana 的 JVM 指標(biāo)采集。
? 性能回歸:
- 吞吐、延遲、內(nèi)存泄漏測(cè)試要做完整壓測(cè)對(duì)比。
- 特別是支付、訂單流要覆蓋并發(fā)高峰場(chǎng)景。