2015-04-22 55 views
0

由於高內存使用情況,我目前正在運行Google App Engine應用程序中的軟內存錯誤。許多大型對象正在推動內存使用量高速增長。使用memcache會減少我的實例內存嗎?

我想也許如果我設置並從memcache中調用它們可能會減少整體內存使用量。閱讀文檔看起來並不是這樣,memcache的好處是減少HRD查詢。

memcache會對整體內存產生積極或消極的影響嗎?

編輯:我知道我可以升級實例類到F2,但我試圖看看我是否能夠在減少內存的同時保持最低的成本。

回答

3

將對象移入和移出Memcache將不會影響您的內存,除非您在Java代碼或空集合中銷燬這些對象。

更大的問題是memcache實體被限制爲1MB,並且memcache不能保證。第一個限制意味着你不能將非常大的對象放入Memcache中。

第二個限制意味着你不能容易地用memcache替換,例如,一個HashMap - 不可能告訴getValue()是否返回null,因爲一個對象不存在或者因爲它被碰撞出memcache。因此,您每次都必須撥打一個額外的電話到數據存儲區,以查看某個對象是否真的不存在。

+0

這通常是真的,我可以看到memcache可以幫助的情況。如果代碼使用大量內存來計算一個小結果,那麼可能會緩存結果,從而減少計算它的需要並減少內存使用量。如果這個問題對於這個場景不那麼模糊,那麼給出替代方案會更容易 –

+0

我不知道如何緩存一個小對象(結果)會減少內存使用量。通常情況下,當你需要將大量數據讀入內存時,需要大量內存,並且直到最後才能丟棄它。我同意,有很多方法可以減少內存使用量,特別是在涉及循環和集合的情況下。 –

+0

謝謝。我的方案是我有很多請求來讀取同一個blob而不改變它。通過多次請求反覆加載它似乎會將內存使用量超過128MB – user1961