GAE:流程终止,因为后端花了太长时间才能关闭后端工作

时间:2012-10-05 04:19:55

标签: java google-app-engine cron backend

我的后端工作是在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.

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

2 个答案:

答案 0 :(得分:5)

当App Engine需要关闭后端但后端无法在30秒内退出时,会生成该错误。 here列出了可能发生这种情况的一些原因。根据错误的类型,App Engine可能会向您的后端发送即将关闭的通知,因此register a shutdown handler最好是一个好主意,这样您就可以收集有关应用程序状态的更多数据。< / p>

如果您经常看到这种情况,可能会有一个系统的解释,例如您的工作记忆超过了后端班级的最大值。

答案 1 :(得分:0)

处理同样的问题。看看官方文档中列出的原因。从统计数据来看,内存消数据存储区争用问题也在我的代码中处理。超时也是如此。将任务机制更改为可恢复的块似乎是唯一的出路。

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

优点是taskqueuus具有更好的故障保护/切换功能,而不仅仅是一项巨大的cron工作。一个任务失败并不意味着大型任务列表的其余部分失败。