2012-02-17 58 views
22

我的應用程序的用戶試圖使用我的應用程序發送文件作爲電子郵件附件。但是,這樣做提出哪些我無法破譯GAE中的「軟私人內存限制」是什麼?

Exceeded soft private memory limit with 192.023 MB after servicing 
2762 requests total 

While handling this request, the process that handled this request was 
found to be using too much memory and was terminated. This is likely to 
cause a new process to be used for the next request to your application. 

If you see this message frequently, you may have a memory leak in 
your application. 

什麼是「軟專用空間限制」,什麼是可能帶來此異常以下異常?

+1

看起來好像GAE適用於運行應用程序的進程可以使用多少內存的限制。你的應用程序超過了這個限制(可能試圖在緩衝區中保存一個非常大的附件?),所以系統採取了行動。唯一讓我感到困惑的部分是消息說這個過程是「終止」的,所以在執行的線程中引發了這個異常? – 2012-02-17 16:56:12

+1

@SteveJessop AFAIK,這個過程被允許在被終止之前完成最後的請求。 – 2012-02-17 23:15:17

回答

21

「軟專用內存限制」是App Engine將停止實例接收任何更多請求,等待任何未完成請求並終止實例的內存限制。當你使用太多的內存時,可以把它看作一個優雅的關機。

偶爾碰到軟限制是可以的,因爲您的所有請求都應該完成。但是,每次發生這種情況時,您的下一個請求可能會啓動一個可能會影響延遲的新實例。

20

我假設你使用的是最低級的前端或後端實例。 (F1或B1級別)都有128 MB的內存配額,所以你的應用程序很可能超過了這個配額限制。然而,這個配額似乎並沒有嚴格執行,Google對此有一定的寬容(因此術語soft limit),我有幾個F1應用程序實例在被App Engine終止之前花費了大約200MB的內存。

嘗試將您的實例類增加到具有256MB內存配額的下一個更高級別的類(F2或B2),並查看錯誤是否重新發生。此外,請每次發送帶有附件的電子郵件時,對錯誤是否可重現進行調查。因爲你所看到的可能是症狀而不是原因,而你的應用程序中消耗大量內存的部分可能在其他地方。

+2

我正在使用最低級別的實例 - 這是增加內存限制的好呼籲。我會嘗試附加一個大的選擇更高的實例。 – user714852 2012-02-17 23:41:50

+0

另外不要忘記更新後端。在我看來,AppEngine默認運行B1。試試:appcfg.py後端。更新(另請參閱:https://groups.google.com/forum/?fromgroups=#!topic/google-appengine/7U5sVDpjcmk) – 2013-01-03 11:34:24

+1

對我來說,聽起來像是發生了一些內存泄漏,GAE上的實例沒有釋放內存正常。 – Jonny 2014-05-12 05:07:34