目录
问题描述:
解决方案:
问题描述:
项目要求容器化部署,在其他人给的基础镜像上添加我的java程序,由于其他人给的镜像没有jdk环境,需要通过dockerfile将jdk拷入和配置环境变量来构建java环境,启动命令为启动jar包的“java -jar”命令,在windows环境和linux虚拟机中测试均可正常运行,在甲方服务器上运行时报错:
# There is insufficient memory for the Java Runtime Environment to continue.
# Cannot create GC thread. Out of system resources.
# An error report file with more information is saved as:
# //hs_err_pid1.log
甲方服务器为x86架构,系统为银河麒麟,docker版本为18.x,同事在centos虚拟机中运行时遇到过一样的报错,通过升级docker到19版本就解决了,于是给甲方服务器升级docker,分别升级到19、20依旧报错;尝试在jar包的启动命令中添加"-Xmx256m -Xms128m"参数来指定内存容量,试了很多参数,依旧报错;启动容器时的docker命令中添加"-m 1g"来指定容器内存大小,试了很多参数仍旧报错,只不过报错变成了
Error occurred during initialization of VM
Cannot create VM thread. Out of system resources.
取消容器的启动命令,直接启动容器后,进入命令行,使用java命令,报相同错误;
测试了多种基础镜像,总结发现和gcc有关,其他人提供的基础镜像中,升级安装过gcc的,或者内核为debian12的就会出现这种报错,debian11的则没有问题。
解决方案:
在使用docker run命令启动容器时,添加参数“--security-opt seccomp=unconfined”,例如:
docker run -it --security-opt seccomp=unconfined -p 20003:20003 -v /home/output:/home/output orbit:jar1.0
添加参数后可以正常使用java命令,但是原因未知
参考链接:java - "insufficient memory" while running eclipse-temurin:17-jdk Docker image - Stack Overflow