【问题标题】:Cloud Run finishes but Cloud Scheduler thinks that job has failedCloud Run 完成,但 Cloud Scheduler 认为该作业已失败
【发布时间】:2020-02-02 01:12:06
【问题描述】:

我有一个 Cloud Run 服务设置,我有一个调用该服务端点的 Cloud Scheduler 任务。当任务完成(http 处理程序返回)时,我看到以下错误:

请求失败,因为与实例的 HTTP 连接出错。

但是,实际的处理程序返回 HTTP 200 并成功存在。有谁知道这个错误是什么意思,在什么情况下会出现?

我还附上了日志的屏幕截图。

【问题讨论】:

  • 您能否详细说明您的云运行服务的性质?您如何发送 200 响应?您是否正在刷新/关闭连接?
  • 这是一个简单的 go 应用,在请求结束时返回 200。大约需要 30 秒才能完成。我刚刚意识到我剪掉了包含状态代码的屏幕截图的右侧。上面日志中的第 4 行来自应用程序,并在请求结束时由应用程序中的日志记录中间件发出。这是一个 200 响应。然后它下面的行是 503,这看起来像是来自 Cloud Scheduler 服务的日志。我在另一个端点上运行了 Cloud scheduler,它成功了。该端点需要大约 8 秒才能完成。
  • 同样的问题
  • 我遇到了同样的问题,我也在使用 Go,而不是 Node.js

标签: google-cloud-platform google-cloud-run google-cloud-scheduler


【解决方案1】:

我在我的 FLASK 端点上运行了增量睡眠测试,它在 1 分钟、2 分钟和 10 分钟的等待时间内返回 200。通过 Cloud Scheduler 触发端点后,该作业仅在 10 分钟测试中失败。我发现这是导致失败的 Cloud Scheduler 作业的属性之一。以下解决了我的问题。

gcloud scheduler jobs describe <my_test_scheduler>

在那里,您会看到一个名为“attemptDeadline”的属性,默认设置为 180 秒。

您可以使用以下方法更新该属性:

gcloud scheduler jobs update http <my_test_scheduler> --attempt-deadline 1000s

参考:scheduler update

【讨论】:

    【解决方案2】:

    您的工作需要超过 120 秒吗?我遇到了同样的问题,并发现 13 之前的节点版本有 120 秒 server.timeout 限制。我在 docker 上安装了节点 13,问题就消失了。

    【讨论】:

    • 如果你使用快递,你可以直接res.connection.setTimeout(0)
    • 我在使用 go 应用时遇到了同样的问题
    【解决方案3】:
    1. Google 前端 (GFE) 返回错误 503。 Cloud Run 服务存在暂时性问题,或者 GFE 已确定您的服务尚未准备好或无法正常工作。
    2. 在您的日志条目中,我看到一个 POST 请求。 7 毫秒后出现错误 503。这表明您的 Cloud Run 应用程序尚未就绪(处于由 Cloud Run 确定的就绪状态)。
    3. 一分八秒前,我看到了ReplaceService。这告诉我您的服务尚未处于运行状态,如果您稍后重试,您将看到成功。

    【讨论】:

    • 另外,当我的容器崩溃时,我有 503。可以贴一下云运行的日志吗?
    猜你喜欢
    • 2020-07-25
    • 2017-10-25
    • 2021-10-15
    • 1970-01-01
    • 2021-11-23
    • 2017-09-20
    • 1970-01-01
    • 2019-07-21
    • 2019-10-30
    相关资源
    最近更新 更多