0

我有 Cron 作业,它每 30 分钟运行一次,并将要在动态后端 (B2) 上执行的任务排队。后端循环并做一些工作,然后休眠几分钟,然后重复工作,直到几个小时后完成整个工作,之后后端关闭。(直到后端运行,没有新的任务被执行)

现在连续两天,我看到我的后端突然停止(1.5 小时后),出现熟悉的“进程终止,因为后端关闭时间太长。”。我已经搜索了论坛,但无法确定我的后端关闭的确切原因(除了 Appengine 文档提供的理论原因列表之外)。我检查了我的 DS/Memcache 操作、内存,一切看起来都正常。我将后端从 B1 升级到 B2,但没有运气。

Q1。有谁知道如何进一步调试这个问题?

Q2。即使在此之后,我也希望这项工作能够完成。如果我注册了一个关闭挂钩 LifecycleManager.getInstance().setShutdownHook(),那么有什么好方法可以确保恢复作业(考虑到 Cron 作业可能距离下一次执行还有 29 分钟,我希望该作业能够完成它的东西每 2 分钟一次)

4

2 回答 2

0

对于您的第一个问题,您必须仔细查看日志,应用引擎确实承诺通过对 /_ah/stop 的请求来指示关闭行为,以便对问题提供更多见解。

现在对于您的第二个问题,请坚持应用引擎关于拥有多个实例的建议。在您的情况下,您可以摆脱无限循环遍历某个实体并进入睡眠状态。而是有一个 cron 来查找任务队列并处理单个任务。如果已成功处理,请在某处标记它,或者在完成处理后将其从队列中删除。因此,在失败的情况下,该任务仍然可以处理,除非它被标记为成功并且您的其他实例可以接管。

于 2013-09-25T04:47:24.063 回答
0

是的,同样的事情也发生在我身上。我有一个使用常量内存和 cpu 的后端。Apengine 会定期关闭它,通常在 15 分钟之后,但有时在此之前。文档说它可能会在没有解释的情况下关闭,它会通知后端然后将其关闭。您应该优雅地处理它,这意味着它可以分块工作并重新开始工作。如果你。Ant 将工作分块不使用后端,使用计算引擎实例。

于 2013-09-24T17:25:02.463 回答