限制每个App Engine实例的任务请求数

时间:2012-04-17 22:12:49

标签: python google-app-engine memory-management python-2.7 task-queue

我有一个Google App Engine应用程序,可定期处理内存密集型长时间运行任务的突发事件。我在线程安全模式下在Python2.7运行时使用taskqueue API,因此我的每个实例都同时处理多个任务。结果,我经常遇到这些错误:

  

在为8个请求提供服务后,超出了137.496 MB的软私有内存限制

     

处理此请求后,发现处理此请求的进程使用了​​太多内存并被终止。这可能会导致新进程用于您的应用程序的下一个请求。如果经常看到此消息,则可能是应用程序中存在内存泄漏。

据我所知,每个实例每个都会执行8个任务,并最终达到软内存限制。这些任务从使用非常少量的内存开始,但最终增长到大约15-20MB。

有没有办法限制告诉App Engine为实例分配不超过5个请求?或告诉App Engine该任务预计在10分钟内使用20MB内存并进行相应调整?

我不想使用后端API,因为我希望处理任务的实例数量能够自动扩展,但如果这是唯一的方法,我想知道如何构建它。

1 个答案:

答案 0 :(得分:7)

目前还没有任何方法可以向App Engine基础架构提供相关建议。如果它们不能立即运行,您可以让您的任务返回非200状态代码,在这种情况下,它们将被自动重试(可能在另一个实例上),但这可能会导致大量的流失。后端可能是你最好的选择。

如果设置动态后端,则只会根据任务队列流量的需要进行调整。您可以通过将后端的URL指定为“目标”参数来将任务发送到后端。

使用拉取队列可以更好地控制任务执行。然后,您可以根据您的选择启动后端(或者使用推送队列任务),并让实例以任何适合的方式从拉取队列中拉出任务。