首页 文章

Java App引擎后端突然关闭,如何恢复工作?

提问于
浏览
0

我有Cron作业,每30分钟运行一次,并在动态后端(B2)上执行任务 . 后端循环并做了一些工作,然后睡了几分钟,然后重复工作,直到最后几个小时后完成的工作结束,之后后端关闭 . (直到后端运行,没有新的任务被执行)

现在连续两天,我已经看到我的后端突然停止(1.5小时后)熟悉的“进程终止,因为后端花了太长时间才能关闭 . ” . 我搜索了论坛,但无法确定为什么我的后端关闭(除了Appengine doc提供的理论清单) . 我检查了我的DS / Memcache操作,内存和所有看起来正常 . 我将后端从B1升级到B2,但没有运气 .

Q1 . 有人知道如何进一步调试这个问题吗?

Q2 . 即便在此之后,我希望工作能够完成 . 如果我注册了一个关闭钩子LifecycleManager.getInstance() . setShutdownHook(),那么确保该作业恢复的好方法是什么(考虑到Cron作业可能仍然距离下一次执行还有29分钟,我希望这项工作能够完成它的东西每2分钟)

2 回答

  • 0

    是的,我也是这样 . 我有一个使用常量内存和CPU的后端 . Apengine定期关闭它,通常在15分钟之后,但有时在此之前 . 文档说它可能会在没有解释的情况下关闭,它会通知后端然后将其关闭 . 你应该优雅地处理它,这意味着它可以通过块工作并重新开始工作 . 如果你 . Ant将块中的工作划分为不使用后端,使用计算引擎实例 .

  • 0

    对于您的第一个问题,您必须仔细查看日志,应用程序引擎会通过请求/ _ah / stop来指示关闭行为,以便在此问题上提供更多见解 .

    现在针对您的第二个问题,坚持使用app引擎建议拥有多个实例 . 在你的情况下,你可以无限循环通过某个实体并进入睡眠状态 . 而是拥有一个查找任务队列并处理单个任务的cron . 如果处理成功,则将其标记为某处,或者在完成处理后将其从队列中删除 . 因此,如果失败,任务仍然可以处理,除非其标记成功并且您的其他实例可以接管 .

相关问题