1

我正在使用 python 和烧瓶灵活地在 gae 上运行应用程序。我定期使用 cron 作业调度云任务。这些基本上循环遍历所有用户并执行一些聚类分析。任务终止而不会引发任何类型的错误,但不会执行所有工作(意味着并非所有用户都被循环通过)。它似乎不会在一致的时间 276.5s - 323.3s 发生,也不会在同一个用户处停止。有没有人经历过类似的事情?

我的猜测是我在某处违反了某种类型的资源限制或超时。我想过或尝试过的事情:

  • 应允许云任务运行长达一个小时(根据此:https ://cloud.google.com/tasks/docs/creating-appengine-handlers )

  • 我将 gunicorn 工人的超时时间增加到 3600 以反映这一点。

  • 我有几个工人正在运行。

  • 我试图找出是否存在内存峰值或 CPU 过载,但没有发现任何可疑之处。

抱歉,如果我太含糊或完全没有抓住重点,我对这个问题感到很困惑。感谢您的任何指点。

4

2 回答 2

1

感谢您提供的所有建议,尽管偶然阅读了 Firestore 文档,但我与他们一起玩并找到了根本原因。我没有迹象表明这与 Firestore 有任何关系。

从这里:https ://googleapis.dev/python/firestore/latest/collection.html 我发现 Query.stream()(或 Query.get())对单个文档有超时,如下所示:

注意:在 GAPIC 客户端配置中为 RunQuery API 设置的 max_rpc_timeout_millis 值之后,底层响应流将超时。在该点之前未从迭代器中消耗的快照将丢失。

所以最终超时的是所有用户的查询,我偶然遇到了这个,我发现的任何错误都没有让我回到查询。希望这对将来的人有所帮助!

于 2019-09-19T16:01:22.560 回答
0

除了使用 Cloud Scheduler,您还可以检查日志以确保任务正常运行并确保没有截止日期问题。由于应用程序日志被分组,并且在任务本身执行后,它被发送到 Stackdriver。强制终止任务时,可能不会输出任何日志。尝试捕获截止日期异常,以便输出一些日志,您可能会看到一些有用的信息来开始故障排除。

于 2019-09-06T23:41:11.063 回答