我们正在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
答案 0 :(得分:1)
env_variables: JAVA_OPTS: "-Xmx16g"
将以上内容添加到app.yaml中就可以了...