GAE:进程终止,因为后端在后端作业中关闭的时间过长
Posted
技术标签:
【中文标题】GAE:进程终止,因为后端在后端作业中关闭的时间过长【英文标题】:GAE :Process terminated because the backend took too long to shut down in backends job 【发布时间】:2012-09-26 04:56:44 【问题描述】:我的后端工作是在 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.
如何在我的程序中处理这种错误
【问题讨论】:
【参考方案1】:当 App Engine 需要关闭您的后端但后端未能在 30 秒内退出时会生成该错误。列出了可能发生这种情况的一些原因here。根据错误的类型,App Engine 可能会向您的后端发送即将关闭的通知,因此最好发送至register a shutdown handler,这样您就可以在即将发生这种情况时收集有关应用状态的更多数据。
如果您经常看到这种情况,则可能有系统的解释,例如您的作业内存超过了后端类的最大值。
【讨论】:
添加 sutdown 处理程序对我的应用没有帮助。我正在使用带有后端的 python2.7 webapp。 Appengine 95% 的时间都在日志中显示此消息。处理程序在上周仅被调用了 2-4 次。当它确实被调用时,后端确实完成了工作。记录内存和处理器使用情况显示在限制范围内。不能保证像后端的 google io talk 那样调用关闭处理程序。【参考方案2】:处理同样的问题。查看了官方文档中列出的原因。从统计数据来看,内存消耗似乎还可以。数据存储争用问题也在我的代码中处理。超时也。改变任务机制以在可恢复的块中工作似乎是唯一的出路。
在追踪这个错误一段时间后,AppEngine 开发范式似乎围绕着 url 处理程序,但在时间、内存等方面存在限制。这也适用于长时间运行的任务。我将我的长期任务重新安排为执行小任务。任务队列触发了较小的任务,这些任务在完成队列下一个任务之前依次运行。从未失败过一次!
优点是 taskqueuus 比一个巨大的 cron 作业有更好的故障保护/切换。一项任务失败并不意味着庞大的任务列表的其余部分失败。
【讨论】:
以上是关于GAE:进程终止,因为后端在后端作业中关闭的时间过长的主要内容,如果未能解决你的问题,请参考以下文章
Android - multiDexKeepProguard 的目的是啥?它与 gradle 中关闭的 proguardFiles 相比如何?