1

我有一个 Google App Engine 应用程序,它会定期处理大量内存密集型长时间运行的任务。我在 Python2.7 运行时以线程安全模式使用任务队列 API,因此我的每个实例都同时处理多个任务。结果,我经常收到以下错误:

总共服务 8 个请求后,超过了 137.496 MB 的软私有内存限制

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

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

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

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

4

1 回答 1

7

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

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

您可以通过使用拉取队列获得对任务执行的更多控制。然后,您可以根据自己的选择启动后端(或使用推送队列任务),并让实例以任何适合的方式将任务从拉取队列中拉出。

于 2012-04-17T23:25:30.787 回答