2015-12-14 76 views
2

我的App Engine應用程序存在內存泄漏問題。 我一直記錄內存使用情況以查找問題。前端和後端之間的內存使用情況差異很大(奇怪)

from google.appengine.api.runtime import memory_usage 
memory_usage().current() 

超過「128 MB的軟專用內存限制」的功能位於延遲任務中。它應該每次都有相同的表現。 我從控制檯任務隊列(後端)和通過get-request從前端重新運行它。在第六次日誌之後都會得到異常。

結果不同的是一種方法,我不能換我的頭周圍:

<Frontend-run> 
1: 40.3515625 
2: 50.3515625 
3: 59.71875 
4: 63.5234375 
5: 72.49609375 
6: 75.48046875 

<Backend-run> 
1: 98.83203125 
2: 98.83203125 
3: 98.83203125 
4: 98.83203125 
5: 98.83203125 
6: 98.83203125 

我有三個問題與結果:

  • 一個與總內存池的三分之二在開始分配
  • 後端使用兩倍的內存(運行相同的功能)
  • 後端內存使用情況不像前端那樣隨時間增加。

任何人都可以爲我做這個意義嗎?

回答

1

除了你所期望的基礎上與他們處理請求的實際活動的內存使用情況,該情況下也有變化的橫請求的內存使用情況的偏移,包括,例如:

  • 的而接受處理之前的申請至今加載語言(Python)的沙盒本身
  • 額外的Python庫
  • 剩菜尚未被垃圾收集器清洗(例如同時frontent可能不會在後臺可以加載延遲執行庫)(它們應該最終消失,但偶爾會出現活動高峯可能會導致超過限制,甚至死亡的情況下(和重新啓動) - 你會發現,當使用雲顯著超過限額的死亡發生了,我一看,例如,> 150MB爲128M限制)

庫的按需加載是改善實例啓動時間的典型方法。這種技術會導致內存泄漏,但這並不一定意味着內存泄漏。

128M對於一個應用程序來說也是不夠的(你會驚訝地發現實際需要多少,而128M並不是很多!),升級實例類型是唯一可行的方法。您現在可以真正嘗試並監控使用情況 - 6個請求是恕我直言,不足以建立模式 - 如果您升級並且最終看到內存使用率趨於平穩,那麼很可能需要升級。如果它不平衡,那麼很可能是你實際上有內存泄漏。

相關問題