
本文基于兩個出發點,描述了業務平臺于21年12月啟動了對JDK版本升級的適配之路,并回顧了整個升級程序,對升級程序中的問題做了記錄,
一、升級版本的選擇
二、GC選擇及功能適配
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
三、升級JDK11相關組件的升級
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
四、灰度及上線流程的選擇
-
代碼使用JDK8進行編譯,但要求代碼可以同時在JDK8及JDK11上運行
-
上執行緒序中,先將日常及預發環境的版本切換成JDK11和JDK8同時運行,回歸測驗程序中同時測驗JDK11、JDK8版本下的運行情況
-
線上逐步灰度JDK11運行環境的功能,做好監控及線上排查定位,隨著幾次大促下來后,逐步將所有的容器切換到JDK11,下線JDK8環境的容器,
-
利用運行態的JDK11特性,優化系統性能
-
將編譯從JDK8切換到JDK11 ,同時充分JDK11本身的新的特性,
if [ -f /home/admin/logs/jdk11.enable ]; then
export JAVA_HOME=/opt/taobao/install/ajdk11_11.0.14.13/
export JDK11_ENABLE=true
echo "enable jdk11 , use new JAVA_HOME : ${JAVA_HOME}"
fi
if [ "$JDK11_ENABLE" == "true" ]; then
CATALINA_OPTS="${CATALINA_OPTS} -Xlog:gc*:${MIDDLEWARE_LOGS}/gc.log:time"
CATALINA_OPTS="${CATALINA_OPTS} --add-exports=java.base/jdk.internal.loader=ALL-UNNAMED --add-exports=java.base/jdk.internal.loader=jdk.unsupported --patch-module jdk.unsupported=/home/admin/buy2/bin/java9-migration-helper-0.1.jar"
CATALINA_OPTS="${CATALINA_OPTS} -Dio.netty.tryReflectionSetAccessible=true --add-opens=java.base/jdk.internal.misc=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED" CATALINA_OPTS="${CATALINA_OPTS} --add-exports=java.base/jdk.internal.util.jar=ALL-UNNAMED --add-exports=java.base/jdk.internal.util.jar=jdk.unsupported"
CATALINA_OPTS="${CATALINA_OPTS} --add-opens=java.base/com.alibaba.wisp.engine=ALL-UNNAMED" CATALINA_OPTS="${CATALINA_OPTS} -XX:CompileCommand=stableif,*::*" test -z "$JPDA_ADDRESS" && export JPDA_ADDRESS=*:8000 #gson兼容 CATALINA_OPTS="${CATALINA_OPTS} -Djava.locale.providers=COMPAT,SPI" else
CATALINA_OPTS="${CATALINA_OPTS} -Xloggc:${MIDDLEWARE_LOGS}/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
CATALINA_OPTS="${CATALINA_OPTS} -XX:-UncommonNullCast -XX:CompileCommand=stableif,*::*" test -z "$JPDA_ADDRESS" && export JPDA_ADDRESS=8000 fiexport G1_ENABLE=false if [ -f /home/admin/logs/g1.enable ]; then export G1_ENABLE=true echo "enable g1" fi if [ "$G1_ENABLE" == "true" ]; then
CATALINA_OPTS="${CATALINA_OPTS} -Xms9500m -Xmx9500m" CATALINA_OPTS="${CATALINA_OPTS} -XX:+UseG1GC"
CATALINA_OPTS="${CATALINA_OPTS} -XX:G1HeapRegionSize=32m" CATALINA_OPTS="${CATALINA_OPTS} -XX:+G1BarrierSkipDCQ"
CATALINA_OPTS="${CATALINA_OPTS} -XX:InitiatingHeapOccupancyPercent=40" CATALINA_OPTS="${CATALINA_OPTS} -XX:-G1UseAdaptiveIHOP"
CATALINA_OPTS="${CATALINA_OPTS} -XX:G1HeapWastePercent=2" else CATALINA_OPTS="${CATALINA_OPTS} -Xms10g -Xmx10g"
CATALINA_OPTS="${CATALINA_OPTS} -Xmn5632m" CATALINA_OPTS="${CATALINA_OPTS} -XX:+CMSScavengeBeforeRemark"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+UseConcMarkSweepGC -XX:CMSMaxAbortablePrecleanTime=5000"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+CMSClassUnloadingEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly"
fi
五、二三方包適配及改造
-
版本號格式的變化
-
本地化的優先級變化
-
module化
-
廢棄代碼清理
-
JDK日志架構變化
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
六、JDK11引數改造
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
七、從JDK8升級到JDK11后的性能表現
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
八、G1 GC測驗驗證


export G1_ENABLE=false
if [ -f /home/admin/logs/g1.enable ]; then
export G1_ENABLE=true
echo "enable g1"
fi
if [ "$G1_ENABLE" == "true" ]; then
CATALINA_OPTS="${CATALINA_OPTS} -Xms9500m -Xmx9500m"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+UseG1GC"
CATALINA_OPTS="${CATALINA_OPTS} -XX:G1HeapRegionSize=32m"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+G1BarrierSkipDCQ"
CATALINA_OPTS="${CATALINA_OPTS} -XX:InitiatingHeapOccupancyPercent=40"
CATALINA_OPTS="${CATALINA_OPTS} -XX:-G1UseAdaptiveIHOP"
CATALINA_OPTS="${CATALINA_OPTS} -XX:G1HeapWastePercent=2"
else
CATALINA_OPTS="${CATALINA_OPTS} -Xms10g -Xmx10g"
CATALINA_OPTS="${CATALINA_OPTS} -Xmn5632m"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+CMSScavengeBeforeRemark"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+UseConcMarkSweepGC -XX:CMSMaxAbortablePrecleanTime=5000"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+CMSClassUnloadingEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly"
fi

展望
本文來自博客園,作者:古道輕風,轉載請注明原文鏈接:https://www.cnblogs.com/88223100/p/Adaptation-path-of-business-platform-upgrading-JDK11.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/545685.html
標籤:Java
