前言

昨天在Linux上安装了RocketMQ之后在bin文件目录下运行 sh mqnamesrv 的启动代码后直接就报了下面的异常:

OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
Unrecognized VM option 
Unrecognized VM option 'UseCMSCompactAtFullCollection'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

看不懂没事,网易词典翻译一下:

OpenJDK 64位服务器虚拟机警告:选项UseConcMarkSweepGC在9.0版本中已被弃用,可能在未来的版本中被删除。
未被认出的VM选项
无法识别的虚拟机选项“UseCMSCompactAtFullCollection”
不能创建Java虚拟机。
错误:发生了致命异常。程序将退出。

翻译了也看不懂那就只能百度一个个方法去试了,通过一顿折腾终于能够运行了,所以记录下来给遇到同样异常的朋友一个解决思路。

所用环境

服务版本
RocketMQ4.5.2
JDK8
LinuxCentOS Linux release 7.6.1810 (Core)
Nodejs14.15.1
Elasticsearch7.4.0

解决方法

首先百度了解到可能是由于jdk版本过高,原本使用的是jdk-8u171-linux-x64.tar.gz
于是基于jdk1.8下载了更低版本的jdk-8u144-linux-x64.tar.gz
Java过往版本下载:
https://www.oracle.com/cn/java/technologies/javase/javase8-archive-downloads.html

  • jdk-8u144-linux-x64.tar.gz 解压到之前安装JDK的目录下。在这里插入图片描述
    如果不确定JDK装在哪了可以用 which java 命令确认一下。
    在这里插入图片描述

  • 然后用 vim /etc/profile/etc/profile 把JDK的JAVA_HOME给替换成144的 。在这里插入图片描述

  • 可以看到我在这里把JDK、Nodejs、Elasticsearch的HOME路径放在了一起 。在这里插入图片描述

  • 然后就进到rocketmq的bin目录下。

  • 运行命令 sh mqnamesrv 可以看到报了开头的异常。
    在这里插入图片描述

  • 通过一个朋友的提醒我试着将Elasticsearch的HOME路径给注释掉
    在这里插入图片描述

重点

  • 使用 Esc + :wq! 强制保存退出vim模式后,一定一定要记得用 source /etc/profile 使更改后的文件生效然后再运行一次之后,可以看到启动成功不再报错在这里插入图片描述

  • 但是我不知道Elasticsearch的HOME路径给注释掉之后会不会影响启动,如果不能启动且我要用Elasticsearch的话就又得把注释解开,用完又给注释掉,每次这样来来回回的话会很麻烦。

  • 于是我试着将Elasticsearch的HOME路径给放到profile文档最底部且不注释掉。

  • 这里如果vim进去文件显示不全的话可以按住shift+pageup或者pagedown进行翻页,直到底部。
    在这里插入图片描述

  • 保存退出后,用 source /etc/profile命令生效的之后再运行一遍之后果然成了,但是之后我又试了一遍之后突然又不行了。
    所以如果你用这种方法解决了就最好别再改动,但是将Elasticsearch的HOME路径给注释掉方式感觉更加稳定。

  • 于是只能试试Elasticsearch的HOME路径被注释掉之后的Elasticsearch启动和使用是否会受到影响在这里插入图片描述

  • 切换用户之后进入Elasticsearch的bin目录运行 ./elasticcsearch 可以看到在HOME注释掉的情况下Elasticsearch还是能够启动起来在这里插入图片描述在这里插入述在这里插入图片描述

  • 访问虚拟机地址依旧成功
    在这里插入图片描述

结语

听朋友说这个异常的原因可能是因为Elasticsearch的某些配置会影响到RocketMQ的启动然后就调用了原生的JDK,但是原生的JDK肯定是不满足要求的,但是我确定我原生JDK是卸载掉了的。

所以如果没有更好的办法的话,最好的解决办法就是把 /etc/prfile 里Elasticsearch的HOME路径注释掉,同时也不会影响Elasticsearch的使用。

希望这篇文章能够帮到你。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐