【问题标题】:Why is my task failing in Google's App Engine?为什么我的任务在 Google 的 App Engine 中失败?
【发布时间】:2026-02-09 01:15:01
【问题描述】:

每周大约 3-4 次,我的两个 12 小时任务中的一个充当从 API 端点到雪花数据库的 ETL 失败,我无法弄清楚究竟是什么原因。

Cron Task Mananger 说它最后一次运行是在今天早上 6:29,但在检索日志时只有一行内容:

This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This request may thus take longer and use more CPU than a typical request for your application.

我不确定我是否需要热身、分配特定的工人等,因为单行错误的日志对我来说太无信息了。我正在使用一个相当大的实例类,我希望它能够处理大部分工作负载。

成功运行的日志如下所示:

https://github.com/markamcgown/GF/blob/main/downloaded-logs-success2.csv

还有失败:

https://github.com/markamcgown/GF/blob/main/downloaded-logs-20210104-074656.csv

App.yaml:

service: vetdata-loader
runtime: python38

instance_class: F4_1G

handlers:

- url: /task/loader
  script: auto

已更新,这是我最新的 app.yaml,现在失败较少但有时仍然失败:

service: vetdata-loader
runtime: python38

instance_class: B4_1G

handlers:

- url: /task/loader
  script: auto

basic_scaling:
  max_instances: 11
  idle_timeout: 30m

【问题讨论】:

    标签: google-app-engine google-cloud-platform cron-task app.yaml


    【解决方案1】:

    我认为您没有使用正确的实例类。如果您查看here about the timeouts and the task call,自动缩放的呼叫时间限制为 10 分钟,基本和手动缩放的呼叫时间最长为 24 小时。

    如果我拿你的instance_class,FXXX 类型是suitable for automatic scaling。请改用B4_1G 实例类并检查您是否仍然有这些问题。你不应该。

    【讨论】:

    • 谢谢,我会调查的。你能描述一下为什么如果我的失败在 10 分钟后超时,我只会得到一行错误日志吗?我以为我会看到它运行并输出我在最初部署它之前运行它长达 10 分钟时看到的内容。这是否与它没有被预热有关,有没有办法查看与那些潜在的 10 分钟真正发生的事情相关的日志?
    • 我同意,1行日志不正常,您应该开始处理并在几分钟后停止。如果从 0 开始缩放,警告线是正常的。您对 Cloud Logging 有看法吗?你可能有更多的细节。
    • 嘿 guillaume,我对你进行了更改,它经常停止失败,但 3 天(6 次运行)后它仍然失败,再次使用相同的 1 行日志。你能看看我上面更新的 app.yaml 并给出关于如何更好地调整它的任何最终想法,也许除了更高的超时/实例之外?如果是这样,我会尝试并感谢您的回答,因为它有点帮助但还没有完全。
    • 你还有 1 行日志吗? Cloud Logging 中没有更多内容了吗?
    • 是的,奇怪的是只有一行。我不知道有什么方法可以将其转发给 Google,要么不付费,要么只是提供一般性反馈。