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