首页 > 解决方案 > 在具有 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 上)

谢谢大家

标签: dockerkubernetesdockerfileamazon-cloudformation

解决方案


请将您的环境变量从 更改JAVA_OPTSJAVA_TOOL_OPTIONS。这对我使用 Java8 有效。


推荐阅读