我們正在使用PHP,並且正在使用memcached v1.4.6進行緩存。我們正在使用來自PECL的memcache擴展memcache-2.2.6。我們使用持久連接來連接到memcached。隨着密鑰數量的增加,PHP memcache返回false
最近我們做了一些改變,使存儲在memcached中的鍵的數量增加了一倍。這些按鍵的最大長度爲75到80個字符。存儲的值是整數。
每當我們嘗試使用新代碼時,系統在前幾秒(通常少於10秒)內都能正常工作。在開始的幾秒鐘之後,memcache開始爲每個請求返回「false」(獲取,設置,增量)
如果在此階段我們恢復到舊代碼,事情再次開始正常工作。
我們的memcached服務器上的請求速率是每秒約270個請求(使用舊代碼)。預計這個新代碼每秒會增加超過1000個請求。
當memcache開始返回「false」時,大約15%的分配內存空閒。
什麼可能導致此行爲?
是做什麼用的命令啓動memcached服務器?也許這是一個最大的內存問題,你說它什麼時候開始重複虛假,只有15%的內存是空閒的,是整個操作系統內存,還是僅僅爲memcached分配的內存? – capi 2012-03-29 15:25:41
我們使用以下命令啓動memcached服務器:'/ usr/bin/memcached -d -m 2048 -u root'。當它開始返回「false」時,分配給memcached的內存的15%是空閒的。如果我錯了,請糾正我,但即使在沒有空閒內存的情況下,當我們發出'set'命令時,memcached也不應該逐出舊的項目。在這種情況下,對「set」的響應不應該是「false」。謝謝。 – Nikhil 2012-03-30 03:15:10
嘗試使用munin或phpmemcachedadmin查看驅逐率(非常容易安裝,請在我的帖子下面鏈接)。可能會提供更多關於memcached內部進行的信息。您也可以深入到平板並查看存儲的項目及其值。作爲最後的手段,嘗試使用Memcached庫,它有更多的運行時選項,代碼類似,如果你已經有了一個包裝器,可能不會有如此大的改變。 – capi 2012-03-30 11:11:43