jdk 的升级速度还是挺快的,但是大部分为了求稳(也可能只是怕麻烦)都只停留在 8 的阶段,下面分享下 8->11 需要注意的地方。

一、JDK选择

1.1 Oracle's OpenJDK vs AdoptOpenJDK

Oracle's OpenJDK 与 AdoptOpenJDK 都是对 OpenJDK 项目的源码进行 build 之后的产物,但 AdoptOpenJDK 会提供更长的更新服务,而 Oracle's OpenJDK只提供六个月的更新服务。因此建议使用 AdoptOpenJDK,而不是Oracle's OpenJDK。

1.2 JVM版本

AdoptOpenJDK目前可以选择的JVM有两种。一种是原有的 hotspot,另一种是 IBM 开源的 openj9。
openj9 占用的内存更少,但 CPU 密集任务方面不如 hotspot,就目前而言,一般开发与生产环境还是推荐 hotspot。

如下是现在网址:https://adoptium.net/releases.html?variant=openjdk11
如非必须:建议升级到最新版本

二、排查模块化后问题

使用jdk11自带工具jdeps -jdkinternals进行依赖关系排查,解决相关问题。
更多用法: https://docs.oracle.com/en/java/javase/11/tools/jdeps.html#GUID-A543FEBE-908A-49BF-996C-39499367ADB4

示例:

image.png

注意:红圈中的类型一定要修改(属于下面描述的第三种)

需要注意必须修改的三种类型:

  1. Obsolete Java Options: 参数可以被接受但是忽略掉了,但是会有警告,一般这种参数有替代写法,请用替代的写法
  2. Deprecated Java Options: 参数可以被接受并有效,但是会有警告,一般这种参数有替代写法,请用替代的写法
  3. Removed Java Options: 参数被移除,并且使用的话会有报错

在JDK 11中,删除了Java EE和CORBA模块。不推荐在JDK 9中删除这些模块。
删除的模块是:

  • java.xml.ws:用于XML Web服务的Java API(JAX-WS),用于Java平台的Web服务元数据以及用于Java的附件的SOAP(SAAJ)
  • java.xml.bind:用于XML绑定的Java体系结构(JAXB)
  • java.xml.ws.annotation:Java SE定义的JSR-250 Common Annotations的子集,用于支持Web服务
  • java.corba:CORBA
  • java.transaction:Java SE定义的Java Transaction API的子集,用于支持CORBA对象事务服务
  • java.activation:JavaBeans Activation Framework
  • java.se.ee:上面六个模块的聚合器模块
  • jdk.xml.ws:JAX-WS的工具
  • jdk.xml.bind:JAXB的工具

如下类似警告一定要修复
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by jnr.posix.JavaLibCHelper (file:/C:/Jython/jython2.7.0/jython-standalone-2.7.0.jar) to method sun.nio.ch.SelChImpl.getFD()
WARNING: Please consider reporting this to the maintainers of jnr.posix.JavaLibCHelper
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

三、JVM配置

  1. JVM日志配置

-Xlog:all=warning:file=/usr/local/logs/jvm.log:uptime,level,tags:filecount=25,filesize=100M

  1. 动态修改JVM日志配置

jcmd + 进程ID +VM.log +子命令,可以实现动态修改jvm log

  1. JVM配置

-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 -XX:InitialRAMPercentage=75.0 -XX:MinRAMPercentage=75.0 -XX:-UseAdaptiveSizePolicy -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/appuser/gc.hprof -Djava.io.tmpdir=/home/appuser/java_tmp -XX:+DisableExplicitGC

G1作为默认官方收集器,官方推荐使用默认设置,如果需要调整要结合GC日志进行分析调整。

四、依赖包升级列表

下面是我司 JDK 升级实践中需要修改到的依赖包列表

image.png

四、参考文章

https://docs.oracle.com/en/java/javase/11/migrate/index.html#JSMIG-GUID-C25E2B1D-6C24-4403-8540-CFEA875B994A
https://skywalking.apache.org/docs/main/v8.4.0/en/setup/service-agent/java-agent/readme/

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部