【问题标题】:Task queue task encounters "Process terminated because the backend took too long to shutdown" too frequently任务队列任务遇到“进程因后端关闭时间过长而终止”过于频繁
【发布时间】:2012-09-16 10:09:05
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: java google-app-engine


    【解决方案1】:

    正如谷歌在 IO 后端所说的那样,将在没有太多警告的情况下关闭。开发人员将编写代码来处理任务失败的失败情况。就我而言,我注册了一个每次都有效的关闭挂钩(仅适用于任务队列)。除此之外,您还可以使用任务名称在恢复期间从失败的任务中筛选出已完成的任务。 GAE 自行退休。所以不用担心后端为什么会失败。只要我们使用带有任务队列的恢复代码,它就会在某个时候执行。

    正如您所提到的,这可能是应用程序之外的错误或服务器负载问题。在不同的应用程序/代码中追逐这个错误之后,我觉得 GAE 范式似乎是围绕 urlhandler 处理小任务块的代码。

    【讨论】:

      【解决方案2】:

      Process terminated because the backend took too long to shutdown 错误通常在部署新版本的后端时出现。如果您启用了<dynamic>true</dynamic> 选项,Google 也会经常关闭后端实例。即使他们向您收取整整 15 分钟的费用,它也会在几分钟后执行此操作,因此请考虑使用永久实例而不是动态实例。

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

      【讨论】:

        猜你喜欢
        • 2013-09-20
        • 2012-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多