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指定爲「目標」參數來將任務發送到後端。

通過使用拉隊列可以更好地控制任務執行。然後,可以根據您的選擇啓動後端(或使用推送隊列任務),並讓實例以任何適合的方式將任務從拉列隊列中拉出。

相關問題