2013-07-26 66 views
1

我有兩個Web服務使用MemcacheD來存儲常見數據庫查詢的結果。這兩種服務都在三個負載平衡的Web服務器上運行,就像MemcacheD一樣,並且性能很好。但是,每兩週一次Web服務的CPU使用率就會從正常的5%增加到20%。我發現如果我重新啓動Memcache,那麼這個問題就解決了。這個特殊的Web服務使用MemCacheD更多和存儲更大的對象MemcacheD導致Web服務減慢

我不認爲這個問題是與我的網絡服務(我知道的最後一句話),因爲重新啓動Memcache後,CPU和內存使用量穩定,並保持這樣幾天。

我認爲Memcache可能存在一個問題,無論是使用它還是使用它的方式。如果我不得不猜測,我會說這個問題是「顛簸」,因爲我的Web服務必須等待從Memcache獲取對象。

難道是我的版本的Memcache太老(I got it from here)或者我沒有給它足夠的內存。每個實例當前分配128 MB。這太低了嗎?有沒有我可以用來衡量Memcache性能的工具?

編輯

我已經增加分配到500MB內存,發現需要重新啓動僅內存緩存的實例之一。這指出問題不在Memcache中,而是以我在那裏使用一個特定對象的方式。我希望儘快解決這個問題。如果這有所作爲,我會發佈一個答案這個問題。

回答

1

我在MemcacheD中存儲兩種類型的數據:一種是與「瑞士的首都是什麼」類似的純信息,另一種是用作內存存儲的列表。後者是導致問題的原因。其中一個清單沒有被清理,結果是不斷增長。這就是爲什麼重新開始似乎工作,因爲列表現在是空的。

MemcacheD不會自動刪除已通過「過期」日期的項目。它將做的是在需要時刪除過期的項目。因此這個列表從未被刪除。當MemcacheD存儲項目時,它將它們存儲在「頁面」上。這些頁面將類似大小的項目組合在一起。因此,將有一個用於16KB的項目,另一個用於32KB的項目等等。顯然,隨着列表不斷增長,這也將使MemcacheD的工作更加艱難。