如何修复 CloudRun 错误“请求已中止,因为没有可用的实例”

Jan*_*ker 12 google-cloud-platform serverless google-cloud-run

我正在使用托管 CloudRun 部署一个带有concurrency=1. 部署后,我将并行触发四个长时间运行的请求。大多数情况下,一切正常——但偶尔,我会在几秒钟内面对来自其中一个节点的 500 个;日志仅提供主题中提供的错误消息。

使用带指数退避的重试并没有改善这种情况;重试也以 500 秒结束。StackDriver 日志也​​不提供更多信息。

可能相关的gcloud beta run deploy论点:

--memory 2Gi --concurrency 1 --timeout 8m --platform managed

错误消息的确切含义是什么——我该如何解决这个问题?

Ste*_*ren 9

当基础设施的扩展速度不足以赶上流量高峰时,可能会出现此错误消息。基础设施只会将请求保留在队列中一段时间​​(大约 10 秒),然后中止它。

这通常发生在:

  1. 流量突然大幅增加
  2. 冷启动时间长
  3. 请求时间长

  • 您可以通过解决此错误的方法来改进这个答案吗?不仅仅是它发生的原因。 (7认同)
  • 这只是一个半答案:它解释了“这个错误意味着什么”,但没有解释“我如何解决这个问题”。[Corinne White](/sf/users/790525221/) 链接到的文档很有帮助,但它们非常通用。 (2认同)

Onk*_*kar 9

当营业时间流量突然增加时,我们也遇到了这个问题。该问题通常是由于流量突然增加以及容纳传入请求的实例启动时间较长而引起的。处理此问题的一种方法是保持预热实例始终运行,即在 cloud run deploy 命令中配置 --min-instances 参数。另一种推荐的方法是减少服务冷启动时间(这在 Java 和 Python 等语言中很难实现)


gui*_*ere 5

我也试验了这个问题。易于复制。我有一个以 6s fibo(45) 处理的斐波那契容器。我使用 Hey 执行 200 个请求。我将 Cloud Run 并发设置为 1。

超过 200 个请求我有 8 个类似的错误。就我而言:突然的流量高峰和长时间的处理时间。(对我来说是短暂的冷启动,它在 Go 中)