docker - 在具有 java 版本 1.8.0_282 的容器上设置 MaxRAMPercentage
问题描述
我正在 AWS 上使用 Docker 和 Kubernetes(cloudformation yaml)
yaml
...
resources:
requests:
memory: "4Gi"
cpu: "0.5"
limits:
memory: "4Gi"
cpu: "0.5"
Dockerfile
FROM amazonlinux:latest
RUN yum -y install java-1.8.0
EXPOSE 8103
ADD myapp.jar
ENTRYPOINT ["java","-XX:MinRAMPercentage=50.0","-XX:MaxRAMPercentage=80.0","-jar","myapp.jar"]
关注你可以从我的 pod 的 bash 中找到 java "1.8.0_282" 的版本
bash-4.2# java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
intx CompilerThreadStackSize = 0 {pd product}
uintx ErgoHeapSizeLimit = 0 {product}
uintx HeapSizePerGCThread = 87241520 {product}
uintx InitialHeapSize := 67108864 {product}
uintx LargePageHeapSizeThreshold = 134217728 {product}
uintx MaxHeapSize := 1073741824 {product}
intx ThreadStackSize = 1024 {pd product}
intx VMThreadStackSize = 1024 {pd product}
openjdk version "1.8.0_282"
OpenJDK Runtime Environment (build 1.8.0_282-b08)
OpenJDK 64-Bit Server VM (build 25.282-b08, mixed mode)
我读了这个博客,作者解释说“如果你运行的是 Java 8 更新 191 或更高版本,或者 Java 10、11、12、13 等,你不能使用 UseCGroupMemoryLimitForHeap 选项。相反,你应该使用已激活的 UseContainerSupport默认。”
出于这个原因,我在 ENTRYPOINT 指令中添加了选项“-XX:MinRAMPercentage=50.0”、“-XX:MaxRAMPercentage=80.0”。
ENTRYPOINT ["java","-XX:MinRAMPercentage=50.0","-XX:MaxRAMPercentage=80.0","-jar","myapp.jar"]
不幸的是,我的 pod 上的 UseContainerSupport 值没有改变,如您所见
bash-4.2# java -XX:+PrintFlagsFinal -version | grep -E "UseContainerSupport | InitialRAMPercentage | MaxRAMPercentage | MinRAMPercentage"
double InitialRAMPercentage = 1.562500 {product}
double MaxRAMPercentage = 25.000000 {product}
double MinRAMPercentage = 50.000000 {product}
bool UseContainerSupport = true {product}
openjdk version "1.8.0_282"
OpenJDK Runtime Environment (build 1.8.0_282-b08)
OpenJDK 64-Bit Server VM (build 25.282-b08, mixed mode)
我也尝试在我的 YAML 中添加 JAVA_OPTS,如下所示,但没有任何改变
env:
- name: JAVA_OPTS
value: "-XX:MinRAMPercentage=50.0 -XX:MaxRAMPercentage=80.0"
最后的问题:-)
我如何以及在哪里设置 -XX:MinRAMPercentage 和 -XX:MaxRAMPercentage 选项以修改 MaxRAMPercentage 的默认值?我想使用 4Gi 专用内存的 3Gi(在 yaml 上)
谢谢大家
解决方案
请将您的环境变量从 更改JAVA_OPTS
为JAVA_TOOL_OPTIONS
。这对我使用 Java8 有效。
推荐阅读
- amazon-web-services - 重新启动 AWS RDS Aurora 主/写入器也会重新启动读取器?
- hyperledger-fabric - 在超级账本结构中属于两个不同组织的两个对等方之间共享详细信息
- powershell - SSIS 包中的 Powershell RunAs 管理员
- laravel - Laravel:在 API 上使用限制和页码进行分页
- julia - 相当于 Julia 中的 pandas 'clip'
- java - 如何在这样的 Maven 项目中指定相对路径?
- python - 推送到远程后,默认的uwsgi改变了位置
- java - Java 1.6 中使用多个整数的字符串连接技巧
- javascript - 如何创建正则表达式模式以从 React 中的字符串中删除多个子字符串?
- batch-file - 如何使用批处理解析和回显多个文件路径