欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

解决JVM中jmap命令收集堆栈信息失败问题:处理VMVersionMismatchException

最编程 2024-02-10 14:58:00
...

一、背景: 线上服务端需要使用kafka, 要求jdk8+.目前线上版本为jdk7 需升级为 jdk8. 


二、jdk7升级jdk8过程主要命令:

--1.卸载openjdk

java -version

rpm -qa | grep java

rpm -e --nodeps xxx

--2.上传新的 linux jdk8文件 并 解压:

tar -zxvf jdk-8u161-linux-x64.gz

mv /home/work/software/jdk1.8.0_161 /usr/local

--3.配置环境变量:

打开文件 /etc/profile 在最后面加入以下内容(其中/usr/local/jdk1.7.0_03 路径为自己服务器上面jdk的安装路径)

vim /etc/profile

#最后一行 unset pathmunge 行下添加配置: 需要先注释掉 jdk7的环境变量配置

# jdk8:

JAVA_HOME=/usr/local/jdk1.8.0_161

JRE_HOME=/usr/local/jdk1.8.0_161/jre

PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

export JAVA_HOME JRE_HOME PATH CLASSPATH

-- 4.jdk7 升级至jdk8:

# 先找到旧的jdk7目录 & 删除jdk7目录

which java

rm -rf /usr/local/jdk1.7.0_79/jre/bin/java

which java

# 重新生效新的jdk8 环境变量

source /etc/profile

java -version

which java

source /etc/profile  --使环境变量修改立即生效

echo $PATH  --查看PATH值

java -version -》 输出如下证明jdk8升级成功

java -version

--5.启动服务端:

jps -v 正常输出

jmap 报错: VMVersionMismatchException: Supported versions are 24.79-b02. Target VM is 25.161-b12


jmap error

问题提示猜测可能是 jdk版本问题,怀疑环境变量问题:

尝试带路径 使用 jmap:   /usr/local/jdk1.8.0_161/bin/jmap -heap 27405 

可以正常输出,证明就是环境变量问题.

/usr/local/jdk1.8.0_161/bin/jmap -heap 27405 


查看环境变量: echo $PATH  换行显示如下

系统环境变量


Fix方法: 覆盖环境变量 使jdk8环境变量只追加一次即可

vim /etc/profile

export PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/bin:/home/opt/bin:/opt/bin:/home/opt/bin

source /etc/profile   -> 使修改后环境变量生效

打印最新环境变量


再次尝试 jmap -heap 27405  完美打印: 问题fix