在了解了可以传递给 Java 8 虚拟机以使其具有容器感知能力的参数(即 -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap)后,我尝试将这些参数添加到我的 Kubernetes 部署中以用于 Spring Boot 服务.在我的部署 YAML 文件的容器部分,我有以下内容: 资源: 要求: 内存:“256Mi” 中央处理器:“50m” 限制: 内存:“512Mi” 中央处理器:“200m” 环境: - 名称:JVM_OPTS 值:“-Xms256M -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1”在我的 Dockerfile 中,我有: ENV JVM_OPTS="-Xmx256M" ENV JVM_ARGS="-Dspring.profiles.active=kubernetes" 曝光 8080 入口点 [ "sh", "-c", "java $JVM_ARGS $JVM_OPTS -jar testservice.jar"]我似乎无法弄清楚为什么最大堆大小没有正确调整大小:$ kubectl exec test-service-deployment-79c9d4bd54-trxgj -c test-service -- java -XshowSettings:vm -version'虚拟机设置: 最大限度。堆大小(估计):875.00M 人体工学机器类:服务器 使用 VM:OpenJDK 64 位服务器 VMopenjdk 版本“1.8.0_171”OpenJDK 运行时环境 (IcedTea 3.8.0) (Alpine 8.171.11-r0)OpenJDK 64 位服务器 VM(构建 25.171-b11,混合模式)我在这里做错了什么?在本地 Docker 安装中,我可以看到 JVM 最大堆设置正确:$ docker run openjdk:8-jre-alpine java -Xms256M -Xmx512M -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1 -XshowSettings:vm -version虚拟机设置: 最小。堆大小:256.00M 最大限度。堆大小:512.00M 人体工学机器类:服务器 使用 VM:OpenJDK 64 位服务器 VM openjdk 版本“1.8.0_171” OpenJDK 运行时环境 (IcedTea 3.8.0) (Alpine 8.171.11-r0) OpenJDK 64 位服务器 VM(构建 25.171-b11,混合模式)
3 回答
繁花如伊
TA贡献2012条经验 获得超12个赞
java -XshowSettings:vm -version
在容器中运行时,JVM_OPTS
不包含在您的命令中。
试试这个
kubectl exec test-service-deployment-79c9d4bd54-trxgj -c test-service \ -- sh -c 'java $JVM_OPTS -XshowSettings:vm -version'
墨色风雨
TA贡献1853条经验 获得超6个赞
我唯一看到的是您缺少的是 Kubernetes pod 定义中命令行参数的实际最大值。你将它传递给你的docker run ...命令行:
env:
- name: JVM_OPTS
value: "-Xms256M -Xmx512M -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1"
代替:
env:
- name: JVM_OPTS
value: "-Xms256M -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1"
添加回答
举报
0/150
提交
取消