8

我的后端工作是在 cron 工作的基础上工作的(每 4 小时一次)。但它在不处理数据的情况下终止。服务器日志显示如下:

500 15377121ms 0kb instance=0 AppEngine-Google; (+http://code.google.com/appengine)
E 2012-10-05 01:50:18.044 Process terminated because the backend took too long to shutdown.

如何在我的程序中处理这种错误

4

2 回答 2

5

当 App Engine 需要关闭您的后端但后端未能在 30 秒内退出时会生成该错误。此处列出了可能发生这种情况的一些原因。根据错误的类型,App Engine 可能会向您的后端发送即将关闭的通知,因此最好注册一个关闭处理程序,这样您就可以在这即将发生时收集有关应用程序状态的更多数据。

如果您经常看到这种情况,则可能有系统的解释,例如您的作业内存超过了后端类的最大值。

于 2012-10-05T05:11:23.397 回答
0

处理同样的问题。查看了官方文档中列出的原因。从统计数据来看,内存消耗似乎还可以。数据存储争用问题也在我的代码中处理。超时也。改变任务机制以在可恢复的块中工作似乎是唯一的出路。

在追踪这个错误一段时间后,AppEngine 开发范式似乎围绕着 url 处理程序,在时间、内存等方面有限制。这也适用于长时间运行的任务。我将我的长期任务重新安排为执行小任务。任务队列触发了较小的任务,这些任务在完成队列下一个任务之前依次运行。从来没有失败过一次!

优点是 taskqueuus 比一个巨大的 cron 作业有更好的故障保护/移交。一项任务失败并不意味着庞大任务列表的其余部分失败。

于 2013-12-01T16:22:03.590 回答