【发布时间】:2022-07-21 15:25:40
【问题描述】:
我有一个 Springboot 应用程序,打包在 docker 映像中,jib 版本为 3.2.0。
当我尝试在我的 linux 服务器上启动时,我立即遇到了错误。
[0.012s][warning][os,thread] Failed to start thread - pthread_create failed (EPERM) for attributes: stacksize: 1024k, guardsize: 4k, detached.
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Cannot create worker GC thread. Out of system resources.
# An error report file with more information is saved as:
# //hs_err_pid1.log
我不知道如何查看 /hs_err_pid1.log,因为服务器立即崩溃,我无法使用 exec 进入。
经过一些测试,我发现容器在特权模式下工作。但出于安全原因,我想避免使用该解决方案。
我尝试释放一些内存 (4g),但容器仍然崩溃。
我已经使用 docker run 和 docker-compose 运行了我的容器,结果相同
我也尝试在不同的服务器(容量相似)上运行它,并且图像工作正常。
有关信息,我使用的是 docker 版本 20.10.4 jib打包的镜像使用jdk17 temurin 17.0.3+7
【问题讨论】:
-
您可以在交互模式 (
docker run --entrypoint sh -it $IMAGE) 下使用覆盖的入口点/命令启动容器,使用 shell 而不是您的 java 进程,然后手动启动 java。如果 JVM 崩溃,容器将保持活动状态,您将能够检查崩溃日志。 -
感谢您的回复,我已经尝试过了。结果,即使是 java -version 也失败并出现同样的错误
-
我用经典的 java 镜像 openjdk17 和 java -version 尝试了同样的事情。所以我不认为我缺少内存
标签: spring-boot docker jib