我有Cron作业,每30分钟运行一次,并在动态后端(B2)上执行任务。 后端循环并做了一些工作,然后睡了几分钟,然后重复工作,直到最后几个小时后完成的工作结束,之后后端关闭。 (直到后端运行,没有新的任务被执行)
现在连续两天,我已经看到我的后端突然停止(1.5小时后)熟悉的“进程终止,因为后端需要很长时间才能关闭”。我搜索了论坛,但无法确定为什么我的后端关闭(除了Appengine doc提供的理论清单)。我检查了我的DS / Memcache操作,内存和所有看起来正常。我将后端从B1升级到B2,但没有运气。
Q1。有人知道如何进一步调试这个问题吗?
Q2。即便在此之后,我希望工作能够完成。如果我注册了一个关闭钩子LifecycleManager.getInstance()。setShutdownHook(),那么确保该作业恢复的好方法是什么(考虑到Cron作业可能仍然距离下一次执行还有29分钟,我希望这项工作能够完成它的东西每2分钟一次)
答案 0 :(得分:0)
是的,我发生了同样的事情。我有一个使用常量内存和CPU的后端。 Apengine定期关闭它,通常在15分钟之后,但有时在此之前。文档说它可能会在没有解释的情况下关闭,它会通知后端然后将其关闭。 你应该优雅地处理它,这意味着它可以通过块工作并重新开始工作。如果你。 Ant将块中的工作划分为不使用后端,使用计算引擎实例。
答案 1 :(得分:0)
对于您的第一个问题,您必须仔细查看日志,应用引擎会promise通过请求/ _ah / stop来指示关闭行为,以便在问题上提供更多见解。
现在针对您的第二个问题,坚持使用app引擎建议拥有多个实例。在你的情况下,你可以无限循环通过某个实体并进入睡眠状态。而是拥有一个查找任务队列并处理单个任务的cron。如果处理成功,则将其标记为某处,或者在完成处理后将其从队列中删除。因此,如果失败,任务仍然可以处理,除非标记成功并且您的其他实例可以接管。