google-app-engine - 仅获得通过 app.yaml 分配的内存的四分之一
问题描述
我们正在 appengine flex 上运行 java8/jetty9 设置。在 app.yaml 中,我们分配了 30G 的 RAM。但是在服务器中,当我们调用 时Runtime.getRuntime().maxMemory()
,返回的数字是~7G。如果我将 RAM 增加到 60G,这个数字增加到 ~15G。似乎 JVM 只获得了我们在 app.yaml 中分配的 RAM 的四分之一。
我还尝试使用 -Xmx30g 运行服务器
但是服务器上传失败并出现错误
Java 运行时环境没有足够的内存来继续。
本机内存分配 (mmap) 未能映射 7158235136 字节以提交保留内存。
确认我们所看到的错误Runtime.getRuntime().maxMemory
,当我们分配了 30G 的 RAM 时,有 ~7G 的限制。剩下的 75% 分配到哪里去了?
这是 Dockerfile
FROM gcr.io/google-appengine/jetty9 运行 apt-get -q 更新 && \ apt-get -y -q --no-install-recommends -t jessie-backports install openjdk-8-jdk && \ apt-get -y -q --no-install-recommends install ssh sshpass && \ 易于清洁 && \ rm /var/lib/apt/lists/*_* 添加 backend.war $JETTY_BASE/webapps/root.war 工作目录 $JETTY_BASE 运行 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_BASE
这是 app.yaml
运行时:自定义 线程安全:真 环境:弹性 处理程序: - 网址:/.* 脚本:此字段是必需的,但被忽略 安全:总是 健康检查: enable_health_check:真 check_interval_sec: 5 timeout_sec: 4 不健康阈值:2 健康阈值:2 资源: 中央处理器:6 内存_gb:30 disk_size_gb: 20 自动缩放: min_num_instances: 1 max_num_instances:3 冷却周期_秒:120 cpu_利用率: 目标利用率:0.5
解决方案
环境变量: JAVA_OPTS:“-Xmx16g”
将上述内容添加到 app.yaml 就可以了...
推荐阅读
- python - 如何在 tkinter 应用程序中推送更新
- python - Flask 如何在没有我将请求作为参数的情况下通过装饰器传递请求变量?
- javascript - 如何扩展正则表达式以接受图像网址中的@
- nginx - Nginx 支持带有回退的特定通配符 server_name (regex)
- angular - 在 html 中动态命名 div 并使用 @ViewChild('xyz') div: ElementRef; 在角度
- apache-kafka - 无法使用骆驼连接卡夫卡
- python-3.x - 在 Python 中迭代图像并转换为表 OCR 的 base64 格式
- r - blogdown::serve_site() 无法渲染 Rmd 文件
- vowpalwabbit - 当我们在 vw-hyperopt 中指定“--algorithms=sgd”时,它是否以自适应、标准化和不变的更新运行?
- reactjs - 在 ReactJs 中添加查询参数时返回按钮不起作用