仅获得通过app.yaml

时间:2018-06-26 01:20:36

标签: google-app-engine app-engine-flexible

我们正在appengine flex上运行java8 / jetty9设置。在app.yaml中,我们分配了30G的RAM。但是,在服务器中,当我们调用Runtime.getRuntime().maxMemory()时,返回的数字约为7G。如果我将RAM增加到60G,则这个数字增加到〜15G。似乎JVM仅获得了我们在app.yaml中分配的RAM的四分之一。

我还尝试使用-Xmx30g运行服务器

但是服务器上传失败并显示错误

  

没有足够的内存供Java Runtime Environment使用   继续。

     

本机内存分配(mmap)无法将7158235136字节映射为   提交保留的内存。

该错误确认了我们在Runtime.getRuntime().maxMemory中看到的内容,当我们分配了30G的RAM时,限制为〜7G。 其余75%的分配又去了哪里?

这是Dockerfile


    FROM gcr.io/google-appengine/jetty9
    RUN apt-get -q update && \
        apt-get -y -q --no-install-recommends -t jessie-backports install 
    openjdk-8-jdk && \
        apt-get -y -q --no-install-recommends install ssh sshpass && \
        apt-get clean && \
        rm /var/lib/apt/lists/*_*
    ADD backend.war $JETTY_BASE/webapps/root.war
    WORKDIR $JETTY_BASE
    RUN java -jar -Xmx30g -Xms20g $JETTY_HOME/start.jar --approve-all-licenses \
       --add-to-startd=jmx,stats,hawtio,requestlog \
       -Djava.util.logging.config.file=src/main/appengine/logging.properties \
       && chown -R jetty:jetty $JETTY_BASE

这是app.yaml


    runtime: custom
    threadsafe: true
    env: flex

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

    health_check:
      enable_health_check: True
      check_interval_sec: 5
      timeout_sec: 4
      unhealthy_threshold: 2
      healthy_threshold: 2

    resources:
      cpu: 6
      memory_gb: 30
      disk_size_gb: 20
    automatic_scaling:
      min_num_instances: 1
      max_num_instances: 3
      cool_down_period_sec: 120
      cpu_utilization:
        target_utilization: 0.5

1 个答案:

答案 0 :(得分:1)


 env_variables:
  JAVA_OPTS: "-Xmx16g"

将以上内容添加到app.yaml中就可以了...