我在我的 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.
我环顾四周寻找解决方案,我读到了我实现的后端实例的关闭挂钩,但它似乎不起作用。
LifecycleManager.getInstance().setShutdownHook(new ShutdownHook()
{
public void shutdown()
{
log().info("Shutting down...");
LifecycleManager.getInstance().interruptAllRequests();
}
});
日志消息永远不会显示,只有Process terminated because...
消息
我还实施了 isShuttingDown 检查
LifecycleManager.getInstance().isShuttingDown();
在我的流程的每个周期中,我首先检查的是后端是否正在关闭,但这个标志永远不会是真的。
该过程总是“残酷地”中断,没有任何钩子来控制关机(也许我可以停止操作,保存一些数据以备将来恢复)
我想到了“内存不足”错误,但我没有在内存中存储任何“大”对象。此外,在每个循环中,实例变量都设置为 NULL,从而强制释放内存。
另外,我期待这样的错误
Uncaught exception from servlet java.lang.OutOfMemoryError: Java heap space
如果这是问题
我是唯一遇到这种问题的人吗?
已经阅读了这篇文章,但没有解决方案