gpt4 book ai didi

Java GAE : Process terminated because the backend took too long to shutdown

转载 作者:行者123 更新时间:2023-12-01 04:21:40 24 4
gpt4 key购买 nike

我正在 Google Appengine 应用程序的后端实例中运行一个长任务(大约 6 小时)。

这是后端配置:

<backend name="backend_1">
<class>B4_1G</class>
<options>
<public>true</public>
<dynamic>false</dynamic>
</options>
</backend>

当进程运行时(在默认线程或并行线程中,我尝试了两者)在随机数量后我得到

2013-09-13 18:52:14.677
Process terminated because the backend took too long to shutdown.

我环顾四周寻找解决方案,我读到了有关 shutdown Hook for Backend instance 的内容,我实现了,但它似乎不起作用。

LifecycleManager.getInstance().setShutdownHook(new ShutdownHook()
{
public void shutdown()
{
log().info("Shutting down...");
LifecycleManager.getInstance().interruptAllRequests();
}
});

日志消息永远不会显示,仅显示进程因...而终止消息

我还实现了 isShuttingDown 检查

LifecycleManager.getInstance().isShuttingDown();

在我的流程的每个周期中,我检查的第一件事是后端是否正在关闭,但此标志永远不会为真。

该过程总是被“残酷”地中断,没有任何钩子(Hook)来控制关闭(也许我可以停止操作,保存一些数据以供将来恢复)

我考虑过“内存不足”错误,但我没有在内存中存储任何“大”对象。另外,在每个周期,实例变量都被设置为 NULL,强制释放内存。

另外,我预计会出现这样的错误

Uncaught exception from servlet java.lang.OutOfMemoryError: Java heap space

如果这是问题

我是唯一遇到这种问题的人吗?

已读 this article ,但没有解决方案

最佳答案

我在使用 python 时遇到了同样的问题。就我而言,我看到的只是终止的消息。检查后,CPU、内存使用情况均正常。尽管如此,分析并降低了内存消耗。仍然看到同样的事情。在您的情况下,它显示内存问题,您可以尝试分析代码并降低内存占用量。正如我在大约 50 次后端运行中注意到的,关闭处理程序不能保证被调用。 Google 开发人员在后端的 Google IO 视频中明确说明了这一点。

在追踪这个错误一段时间后,AppEngine 开发范例似乎围绕着 url 处理程序,在时间、内存等方面存在限制。这也适用于长时间运行的任务。我将长期任务重新改为执行小任务。任务队列触发较小的任务,这些任务依次运行,然后在完成队列中的下一个任务。从来没有失败过一次!

优点是任务队列比庞大的 cron 作业具有更好的故障安全/切换能力。一项任务失败并不意味着庞大任务列表的其余部分失败。

当使用队列接近后端时,关闭钩子(Hook)也能完美工作。与有时在 cron 作业上触发相比,每次都会被触发。

关于Java GAE : Process terminated because the backend took too long to shutdown,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18831571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com