1

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

超出软专用空间限制与服务8个请求后总137.496 MB

处理这个请求后,发现处理该请求的过程中被使用过很多记忆并被终止。这很可能会导致下一个请求应用程序使用新的进程。如果您经常看到此消息,那么您的应用程序中可能会有内存泄漏。

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

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

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

回答

7

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

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

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

相关问题