乐趣区

关于java:如何在-Java-11-下运行-RocketMQ

目前 RockerMQ 的最新版本是 4.9.2,这个版本在 Java 11 下是无奈运行的:

[rocketmq@localhost 00-rocketmq-4.9.2]$ java -version
openjdk version "11.0.13" 2021-10-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.13+8-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.13+8-LTS, mixed mode, sharing)

[rocketmq@localhost 00-rocketmq-4.9.2]$ bin/mqnamesrv 
-Djava.ext.dirs=/jre/lib/ext:/home/rocketmq/00-rocketmq-4.9.2/bin/../lib:/lib/ext is not supported.  Use -classpath instead.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit

相干的 issue 在这里,到目前为止依然是 open 状态。

咱们能够看到,之所以运行失败,次要是因为启动脚本中的 JVM 参数问题。

说到这里我想劝各位公布相似开源我的项目的时候,脚本外面不要带上一大堆的 -XX: 调优参数,这些应该交给用户本人去调整,因为你不晓得用户用的是什么 JVM,你不要强行帮用户去“优化”,只有留个口子就行了。

既然是脚本的问题,那么批改下脚本就能够了:

关上 runserver.shrunbroker.sh(Windows 下则是相应的 .cmd 后缀),做如下批改(批改前记得备份):

  1. 找到蕴含 -Djava.ext.dirs 参数的行,将该行删除或正文掉;
  2. 找到蕴含 -Xloggc 参数的行,将该行删除或正文掉;
  3. 找到蕴含 -XX:+UseGCLogFileRotation 参数的行,将该行删除或正文掉;
  4. 找到蕴含 export CLASSPATH= 的行(在文件的后面局部),将等号前面的内容改为 .:${BASE_DIR}/conf:${BASE_DIR}/lib/*:${CLASSPATH}
  5. 找到蕴含 -XX:-UseLargePages 参数的行,在它的上面增加一行 JAVA_OPT="${JAVA_OPT} --add-exports java.base/jdk.internal.ref=ALL-UNNAMED"

通过这样的批改,RocketMQ 就能够在 Java 11 下胜利启动了。

退出移动版