1、概述
Jdk17以上的java程序,一般不能运行内核2.6.18的Linux上,但可以运行在内核2.6.32以上的Linux上,所以,采用chroot隔离环境,把高版本的Linux内核运行在低版本的系统上
2、chroot环境创建
在内核2.6.32Linux上(如centos6.10)上,按如下步骤创建
(1)切换成root账号
(2)mkdir -p /chroot/centos6(以下部署都以此路径进行说明)
(3)安装基础系统到该目录
使用 yum 的 --installroot 参数:
yum --installroot=/chroot/centos6 install -y \
bash coreutils yum passwd sudo vim-minimal openssh-clients iputils net-tools
(4)挂载必要的虚拟目录
sudo mount --bind /dev /chroot/centos6/dev
sudo mount --bind /proc /chroot/centos6/proc
sudo mount --bind /sys /chroot/centos6/sys
(5)进入chroot环境
chroot /chroot/centos6 /bin/bash
(6)退出chroot环境
exit
(7)清理挂载点
sudo umount /chroot/centos6/dev
sudo umount /chroot/centos6/proc
sudo umount /chroot/centos6/sys
(8)打包chroot环境
tar -czf centos6_chroot.tar.gz -C /chroot/centos6
这样就可以把 centos6_chroot.tar.gz拷贝到低版本(如内核2.6.18)上,按照上面的步骤进入chroot环境
3、在chroot环境上部署java17+程序
3.1、Jdk安装
(1)下载jdk
https://download.java.net/openjdk/jdk17.0.0.1/ri/openjdk-17.0.0.1+2_linux-x64_bin.tar.gz
(2)将openjdk-17.0.0.1+2_linux-x64_bin.tar.gz,拷贝到/chroot/centos6/opt/下
(3)cd /chroot/centos6/opt/
(4)tar -zxf openjdk-17.0.0.1+2_linux-x64_bin.tar.gz
(5)进入chroot环境,执行命令:chroot /chroot/centos6 /bin/bash
(6)cd /opt/jdk-17/bin
(7)./java -version
显示版本信息,则jdk可以使用
(8)将jdk添加到path路径
cat > /etc/profile.d/java.sh <<'EOF'
export JAVA_HOME=/opt/jdk17
export PATH=$JAVA_HOME/bin:$PATH
echo $PATH
EOF
source /etc/profile
java -version
显示版本信息,则jdk安装完成
3.2、Demo测试
因为springboot3.x至少需要jdk17,所以开发springboot3的demo测试安装的jdk17是否正常(具体参考spring官网怎么生成项目),并打包成demo-0.0.1-SNAPSHOT.jar
java -jar demo-0.0.1-SNAPSHOT.jar

出现如图所示界面,则部署成功,后续就可以运行其他的高版本java程序
4、问题
4.1、java.io.IOException: Function not implemented
问题原因:
缺少 epoll_create1 的 glibc 支持,而 不是 epoll 本身缺失。
解决方案:
给JVM 如下启动参数即可绕过,
java -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.PollSelectorProvider -jar yourApp.jar
1万+

被折叠的 条评论
为什么被折叠?



