【问题标题】:How to properly set the JVM options in a flexible GAE application如何在灵活的 GAE 应用程序中正确设置 JVM 选项
【发布时间】:2018-09-12 04:31:44
【问题描述】:

以下是我用于 GAE 灵活 Java 8 / Jetty 应用程序的 app.yaml 文件。

runtime: java
env: flex
manual_scaling:
  instances: 1

runtime_config:  # Optional
  jdk: openjdk8
  server: jetty9

resources:
  cpu: 2
  memory_gb: 4.0

env_variables:
  JAVA_HEAP_OPTS: -Xms3072M -Xmx3072M

health_check:
  enable_health_check: False

handlers:
- url: /.*
  script: this field is required, but ignored

由于某种原因,部署应用程序时未使用 JAVA_HEAP_OPTS 值。至少我不认为它被使用,因为当我 SSH 进入 docker 容器并运行以下命令时,内存值要少得多。

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

有人可以告诉我发生了什么或我需要做些什么不同的事情吗?

谢谢

【问题讨论】:

    标签: java google-app-engine jvm jetty heap-memory


    【解决方案1】:

    该变量仅应用于作为 docker 容器入口点运行的 Java 进程。

    JAVA_HEAP_OPTS 不是一个神奇的环境变量,它会自动和全局地应用于 docker 容器内的任何 Java 随机执行。难怪当您启动自己的独立 Java 进程时看不到任何效果。

    看看下面的代码,你就会明白它是如何工作的:

    【讨论】:

    • 感谢您的回复。因此,如果我使用上述配置部署一个 war 文件,我如何检查运行我的 Web 应用程序的 JVM 是否应用了正确的内存设置?
    • 我打赌 docker 容器内的 ps aux | grep -- '-Xms3072M' 会向您展示 Java 进程。如果没有,请尝试ps aux | grep java 并检查您看到的内容。
    • 好的,谢谢。我得到了进程,但是如何检查JVM内存设置是否正确?
    • 如果您在使用ps aux 检查时看到-Xmx3027M 已正确传递给Java 进程,则您可以相信该参数将生效。如果您仍然无法检查传递了所有参数的实际 Java 命令,请尝试jps -m。它将方便地正确列出传递给每个正在运行的 Java 进程的所有参数。如果您仍然不相信传递的参数会生效,有很多方法可以调查实时 Java 进程的内存统计信息:stackoverflow.com/q/14464770/1701388stackoverflow.com/q/12797560/1701388
    猜你喜欢
    • 2015-08-03
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 2019-04-20
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    相关资源
    最近更新 更多