Linux|操作系统|Error: Could not create the Java Virtual Machine 报错的解决思路

这篇具有很好参考价值的文章主要介绍了Linux|操作系统|Error: Could not create the Java Virtual Machine 报错的解决思路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

现在都流行kubernetes这样的云原生了,因此,很多Java微服务也都集成到类似kubernetes这样的环境下了,毫无疑问的,kubernetes会省去很多环境问题,而最近在部署一个二进制Java项目的时候,遇到了Error: Could not create the Java Virtual Machine 这样的报错

虽然很多年前也遇到过这样的问题,但基本都是很快解决掉了,而这次的问题是比较隐蔽的一个环境问题,感觉类似的问题还是做一个记录比较好,省的以后又忘掉了。

一,

具体报错

[root@node1 ~]# su - es -c "/data/es/bin/elasticsearch"
Unrecognized VM option 'UseConcMarkSweepGC'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

没错,我说的这个Java项目其实就是二进制的elasticsearch,第一反应就是java的版本不对了

那么,这个报错Error: Could not create the Java Virtual Machine  单从字面理解,就是无法创建Java的虚拟机,也就是jvm, 这个很容易理解。

Unrecognized VM option 'UseConcMarkSweepGC' 这个单从字面理解,是Java的gc也就是内存回收出问题了,这个也很容易理解。

因此,排查方向有三个:

  • 服务器内存不足,通过free -mh 命令查看剩余内存是否满足java项目的启动
  • jdk版本过高或者过低,相对你的Java项目来说,通常是 java -version 查看java版本是否和环境变量设定一致
  • Java项目里的jvm参数配置过高,超出本机可分配内存数,例如,本机内存就4G,Xms设置6G。这无论如何是不可能启动Java项目的。

二,

问题解决思路

那么,我要说的是,这种报错,其实Unrecognized VM option 'UseConcMarkSweepGC' 是一个误导,90%的概率是Java的版本不对了,要么高,要么低

那么,如何判断是Java版本的问题呢?

由于启动elasticsearch是su - 过去的,也就是用的是es的环境变量,那么,此时如果有两个jdk,root使用的是openjdk8,es用户使用的是openjdk19,很显然,此时elasticsearch会使用openjdk19,而我的elasticsearch版本是6.3.2,很明显的,jdk的版本过高,自然就出这个报错了。

[root@node1 es]# tail -n 10 /etc/profile
PGDATA=/usr/local/pgsql/data
export PGDATA
PGHOME=/usr/local/pgsql
export PGHOME
PATH=$PATH:$PGHOME/bin:$PGDATA
export PATH PGDATA
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

es用户

[es@node1 ~]$ cat ~/.bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs
export PATH PGDATA
export JAVA_HOME=/home/es/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

此时,es用户的环境变量将会覆盖全局变量(/etc/profile 这个文件的变量是全局变量,对于普通用户来说,自己的变量等级是更高的)

因此,清除es用户的环境变量即可,也就是统一一个jdk版本,.bash_profile  这样的文件的相关环境变量或者删除或者注释就可以了。

注意,普通用户的环境变量就一个.bash_profile,而全局环境变量是两个文件定义,一个是/etc/profile 一个是/etc/bashrc  /etc/bashrc的优先等级是比/etc/bashrc 高的哦~~~~!!!!

一个操作系统是可以安装多个不同版本的jdk,并且一个环境文件用jdk8,一个环境文件用jdk17 18 等等,但最后只会有一个变量生效。

如何证明两者的优先级?

两个文件同时写入同一个变量AAA,profile里的变量值是123456  bashrc里的变量是fuckman,那么,此时echo AAA 只会是fuckman而不会是12345,env里记录的也只会是fuckman哦!!!!!!!~~~~~~

[root@node1 ~]# tail -n 1 /etc/profile
export AAA=123456
[root@node1 ~]# tail -n 1 /etc/bashrc
export AAA=fuckman
[root@node1 es]# source /etc/profile
[root@node1 es]# source /etc/bashrc
[root@node1 ~]# env |grep AAA
AAA=fuckman



[root@node1 ~]# echo $AAA
fuckman

环境是非常重要的,不要随意设置环境,建议是统一到/etc/profile 这一个文件里,bashrc 是和bash绑定的,shell要是换了,比如换成zsh,那么环境变量是可能会丢失的哦。文章来源地址https://www.toymoban.com/news/detail-821933.html

到了这里,关于Linux|操作系统|Error: Could not create the Java Virtual Machine 报错的解决思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Jmeter启动报错处理方法:Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurr

    一、切到jemter/bin路径,双击‘ApacheJMeter.jar’文件 二、切到jemter/bin路径,双击’jmeter.sh’文件 以上两种方法均可尝试。 网上CSDN、简书都说是内存不足改bat文件加,加全局变量,怀疑JDK版本和环境变量配置,装过无数遍,最终都不好使。这两种方法绕过了仅执行bat文件启动,

    2024年02月11日
    浏览(37)
  • ERROR: Network tsg declared as external, but could not be found. Please create the network manually

    docker第一次安装,然后在用docker-compose up -d部署redis时出现这个错误,就按照它的提示,使用docker network create tsg命令,再次执行部署成功。      

    2024年02月11日
    浏览(55)
  • 解决报错:Could not create the Java virtual machine

    今天burp打不开报错Could not create the Java virtual machine。 最终原因:java版本不匹配。 解决方法:        首先,从cmd查看自己的java默认版本,如果和软件需求不一致,需要将匹配的java版本设为默认。操作就是设置环境变量,具体如下: 1、打开环境变量设置“此电脑-属性-高

    2024年02月04日
    浏览(36)
  • kettle 运行Spoon.bat时,显示错误Could not create the java virtual machine.

    kettle 运行Spoon.bat时,显示错误Could not create the java virtual machine , A fatal exception has occured.Program will exit. 可能原因:jdk版本,运行内存不足  错误原因:并非运行内存不足和jdk版本问题,通过查询SpoonConsole.bat得知 Launching Spoon with console output: D:data-integrationdata-integration\\\"D:data-in

    2024年02月05日
    浏览(50)
  • VS2013报错The request was aborted: Could not create SSL/TLS secure channel.

    The request was aborted: Could not create SSL/TLS secure channel.Please click here to retry the request. 由于出现以下错误,无法建立与服务器的连接: 请求被中止:无法创建SSL/TLS安全通道。 请单击此处重试请求。 进入Visual Studio 2013 (这里就简称VS2013了)后,从工具-扩展和更新(U)...,进入界面后,

    2024年02月11日
    浏览(37)
  • 记录一次老服务器启动ActiveMq时报的Could not create the Java Virtual Machine.错误

    服务器系统CentOS7  1、出现ActiveMq服务无法连接 2、查看activemq状态 service activemq status 显示activemq not running 3、找到ActiveMq的bin目录,# 后台启动 ./activemq console 提示Could not create the Java Virtual Machine.错误 可以判断是java运行环境的问题 4、再看看java版本 java -version 5、再看看activemq版

    2024年04月22日
    浏览(35)
  • centos7操作系统开机提示error:file “/boot/grub/i386-pc/normal.mod“ not found

    一.问题现象 公司重要业务虚拟机突然业务访问不了,重启操作系统之后发现操作系统启动不了,直接进入救援模式,提示error:file “/boot/grub/i386-pc/normal.mod“ not found,报错截图 二.处理思路 在救援模式下,只有很少的命令可是使用: set 设置环境变量 ls 查看设备 insmod 加载模

    2024年02月04日
    浏览(24)
  • ERROR: Could not find a version that satisfies the requirement

    报错提示: ERROR: Could not find a version that satisfies the requirement numpy (from versions: none) ERROR: No matching distribution found for numpy ERROR: Could not find a version that satisfies the requirement cv2 (from versions: none) ERROR: No matching distribution found for cv2 [notice] A new release of pip is available: 23.0.1 - 23.1.2 [notice] T

    2024年02月14日
    浏览(27)
  • Could not create server TCP listening socket *:6379: bind: 在一个非套接字上尝试了一个操作 。

    Could not create server TCP listening socket *:6379: bind: 在一个非套接字上尝试了一个操作 。 原因: 启动时需要指定配置文件 Could not create server TCP listening socket 127.0.0.1:6379: bind: 操作成功完成。 网上的: redis-cli.exe , shutdown , exit 根本不好使。 网上的:redis根目录新建 Logs 也不好使。

    2024年02月12日
    浏览(20)
  • flutter 开发之 Could not build the precompiled application for the device. Error (Xcode): No profiles f

    问题:Could not build the precompiled application for the device. Error (Xcode): No profiles for ‘com.example.ql’ were found: Xcode couldn’t find any iOS App Development provisioning profiles matching ‘com.example.ql’. Automatic signing is disabled and unable to generate a profile. To enable automatic signing, pass -allowProvisioningUpdates to x

    2024年02月22日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包