以下部分介绍了应用初始化和服务错误。
使用默认服务账号创建应用时出现权限错误
首次启用 App Engine API 后创建应用时因以下错误而失败:
gcloud CLI
An internal error occurred while calling service consumer manager for service account.
Creating App Engine application in project [PROJECT__ID] and [REGION]....failed. DEBUG: (gcloud.app.create) Error Response: [13] an internal error has occurred
请求日志
Service account creation is not allowed on this project.
控制台
Error while initialising App Engine.
此错误可能是由于在创建应用时强制执行组织政策限制条件 constraints/iam.disableServiceAccountCreation
而导致的。此政策会阻止预配 App Engine 默认服务账号 PROJECT_ID@appspot.gserviceaccount.com
。
如需解决此问题,您必须暂时移除组织政策限制条件 constraints/iam.disableServiceAccountCreation
,以便创建和部署 App Engine 默认服务账号。该默认服务账号是创建应用所必需的,无法跳过。在使用版本级服务账号时,此方法同样适用。然后,您可以删除 App Engine 默认服务账号,或将其替换为成功部署后创建的服务账号。
如果您使用的是自己创建的服务账号,请查看角色建议概览以了解如何强制限制权限,例如针对该服务账号提供为服务代理创建的令牌创建者角色。
Nginx 无法连接到应用容器或与之进行通信
以下错误仅发生在 App Engine 柔性环境中,通常会在发生错误后立即返回 502 错误:
recv() failed (104: Connection reset by peer) while reading response header from upstream
此错误表示 nginx 反向代理 (nginx sidecar) 无法访问应用容器。在日志中,您可以将 nginx 日志中的 502 错误的关闭时间与 nginx.error 日志中的时间进行比较。在发生 nginx.error 错误后紧接着发生 502 nginx 错误可能是导致发生 nginx 502 错误的原因。
当应用的连接 keepalive 超时小于 nginx 的 keepalive 超时时,通常会发生此错误。由于 App Engine 柔性环境中的 nginx 的 keepalive_timeout
为 650 秒,因此应用需要使连接至少在此时间中保持活动状态。默认情况下,Node.js 应用的 keepAliveTimeout
为 5000 毫秒。在这种情况下,您可以将 server.keepAliveTimeout
设置为 700000 毫秒。
如需排查问题,请连接到虚拟机实例以检查应用容器中运行的代码写入的日志,并在必要时添加更多日志记录以找到根本原因。
内存不足
App Engine 柔性环境中会发生以下错误,并且通常返回 502 错误:
kernel: [ 133.706951] Out of memory: Kill process 4490 (java) score 878 or sacrifice child kernel: [ 133.714468] Killed process 4306 (java) total-vm:5332376kB, anon-rss:2712108kB, file-rss:0kB
此错误表示 App Engine 已终止应用。
当实例的内存不足时,会发生此错误。默认情况下,App Engine 柔性环境具有 1GB 内存,并且仅 600MB 内存可用于应用容器。
如需进行问题排查,请检查日志,看看是否存在“内存不足”条目。更新您的 memory_gb
配置并重新部署。
开放的连接数不足,无法处理传入请求
如果等待连接数上限等于或大于活跃连接数的 75%,则应用可能会出现 502 错误。
如需解决此问题,请检查 Cloud Monitoring 指标,查看活跃连接数和等待连接数上限,并减少等待连接数以确保等待连接数上限小于或等于活跃连接数的 75%。