部署新版本的应用程序时,我们在请求日志 (
projects/my-project/logs/appengine.googleapis.com%2Frequest_log
) 中看到许多错误日志,端点的状态代码为 500 /_ah/stop
。这些有消息“进程终止,因为后端已停止。”。
这会在我们的警报中产生噪音,并表明出现了问题。它似乎也同时与其他 5xx 响应相关。
奇怪的是,我们应用程序的日志记录表明该应用程序收到了请求并以 200 状态进行响应。我们尝试为
/_ah/stop
添加一个仅返回 200 的处理程序,因为我们在关闭时没有特殊的清理工作要做。
当 App Engine 实例关闭时会出现此错误。如果更新提供流量(请求)的版本,正在处理的请求将被丢弃,并会看到错误。
如果您通过更新当前提供的修订版来部署新修订版(例如,默认情况下使用
gcloud app deploy
),则可能会发生这种情况。默认情况下,您部署的每个版本都会自动配置为接收 100% 的流量,并停止以前的实例。
要解决此问题,请创建版本并将流量逐渐迁移到该版本,如下所示:
VERSION_ID=$(date +%Y%m%dt%H%M%S)
gcloud app deploy --version $VERSION_ID --no-promote
gcloud app services set-traffic --splits $VERSION_ID=1 --migrate
如果您还没有,您可能需要添加一个
/_ah/warmup
处理程序来支持这一点,并在 app.yaml
: 中添加一个指令
inbound_services:
- warmup
另请参阅:
这是一个 AppEngine 错误。看起来(对于标准环境)实例应该拦截
/_ah/stop
请求并处理它。
在部署的情况下,不会发生该拦截,并且请求会到达已部署的代码。如果您通过删除手动停止实例,则
/_ah/stop
请求将被正确拦截和处理(并且不会到达已部署的代码)。
参见https://issuetracker.google.com/issues/326181160/dependencies