任务队列任务遇到“进程终止,因为后端花了太长时间才能关闭”太频繁

时间:2012-09-24 22:13:21

标签: java google-app-engine

我有工作处理GAE数据库中的记录并上传到谷歌云。由于它需要很长时间,所以我使用任务队列一次处理一小批。但我已经非常一致地看到“进程终止,因为后端花了很长时间才能关闭”日志中的问题。我知道我只有30秒的时间来清理,我超过了这个时间限制。虽然我知道实例可能变得不可用并且有时需要关闭,但它经常发生在每次执行任务的3到4分钟(偶尔10分钟,这是任务队列时间限制),并且没有做太多工作每项任务。

我想知道关闭后端可能是什么原因。这纯粹是服务器端问题还是代码中的一些错误也可能导致这个问题?

谢谢!

2 个答案:

答案 0 :(得分:0)

在部署新版本的后端时,通常会显示

Process terminated because the backend took too long to shutdown错误。如果您启用了<dynamic>true</dynamic>选项,Google也会经常关闭后端实例。即使他们向你收取了整整15分钟的费用,它甚至会在几分钟后完成,因此请考虑使用永久而非动态实例。

另一个问题可能是实例内存不足。在这种情况下,实例重新启动自身导致提到的错误。您可以尝试使用具有更多内存的实例类型,例如B2或B4。

答案 1 :(得分:0)

正如谷歌在IO中所说,后端将在没有太多警告的情况下关闭。开发人员要编写代码来处理任务失败的失败情况。在我的例子中,我注册了一个每次都有效的关闭钩子(只有任务队列)。除此之外,您还可以使用任务名来过滤恢复期间失败的任务。 GAE自行退休。所以不要担心为什么后端首先失败了。只要我们将recovey代码与任务队列一起使用,它就会在某个时刻执行。

正如您所提到的,可能是应用程序之外的错误或服务器加载问题。在不同的应用程序/代码中追逐此错误之后,我觉得GAE范例似乎是针对小任务块的urlhandler代码。