【问题标题】:Set Xmx and Xms for java application running on k8s为在 k8s 上运行的 java 应用设置 Xmx 和 Xms
【发布时间】:2022-01-12 16:04:03
【问题描述】:

我有一个在 k8s 上运行的应用程序,并且想更新 java heapsize 。 我已经更新了 JAVA_OPTS 环境变量并将其设置在部署文件中,如下所示

- name: JAVA_OPTS
              value: "-Xmx768m -XX:MaxMetaspaceSize=256m"

但是当我运行以下命令时,我的更改似乎没有生效

 java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
     intx CompilerThreadStackSize                   = 0                                   {pd product}
    uintx ErgoHeapSizeLimit                         = 0                                   {product}
    uintx HeapSizePerGCThread                       = 87241520                            {product}
    uintx InitialHeapSize                          := 33554432                            {product}
    uintx LargePageHeapSizeThreshold                = 134217728                           {product}
    uintx MaxHeapSize                              := 536870912                           {product}
     intx ThreadStackSize                           = 1024                                {pd product}
     intx VMThreadStackSize                         = 1024                                {pd product}
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (IcedTea 3.12.0) (Alpine 8.212.04-r0)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)

我错了,谁能帮我解释一下如何设置软管值?

【问题讨论】:

  • 如果升级到 JDK11,或者最新的 Java8,则不需要这些值,因为将使用完整的容器空间
  • 这是一个开源应用程序,我无法执行升级,我只是想了解和调整我现在拥有的内容。
  • JDK 9 支持一个新的环境变量JDK_JAVA_OPTIONS 将选项添加到命令行中指定的选项
  • 你的 alpine 容器不是应用程序,它只是打包它。您应该能够选择一个较新的 JRE 容器并将您的应用程序放入其中(如果必须,构建一个新映像而不是从 Docker Hub 中提取)。除此之外,尚不清楚您从哪里运行java。你kubectl exec 到容器了吗?注意任何容器都可以选择忽略JAVA_OPTS
  • @OneCricketeer ,是的,我使用 kubectl exec 到容器并运行 java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

标签: java kubernetes


【解决方案1】:

我看到你使用 OpenJDK Alpine 来部署一个 JAVA 应用程序,所以你需要使用这个环境“JAVA_TOOL_OPTIONS”而不是“JAVA_OPTS”,类似于:

spec:
  containers:
  - name: jvm_options
    image: xxx:xxx
    env:
    - name: JAVA_TOOL_OPTIONS
      value: "-Xmx768m -XX:MaxMetaspaceSize=256m"

一旦您的应用程序运行,您可以查看应用程序日志,您会在下面找到日志:

Picked up JAVA_TOOL_OPTIONS: -Xmx768m -XX:MaxMetaspaceSize=256m

【讨论】:

  • 感谢您的帮助,我在我的应用日志08-Dec-2021 10:14:32.034 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx1024m 2021-12-08T10:14:32.035330795Z 08-Dec-2021 10:14:32.035 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:MaxMetaspaceSize=512m 中看到了这一点。这是否意味着它生效了?
  • 我认为您应该像您在问题中所做的那样验证它。
【解决方案2】:

您可以为此使用容器部分下的命令和参数。例如:

      containers:
      - name: test
        image: test:latest
        command: ["java"]
        args: ["-Xms256m","-Xmx768m","-jar","/app.jar"]

【讨论】:

  • 根据容器,JAVA_OPTS 会做同样的事情,不过
猜你喜欢
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 2017-02-22
  • 2015-07-07
  • 2017-09-24
相关资源
最近更新 更多