2012-01-05 132 views
5

我有一個由nginx和django提供服務的網站。memcached減慢網站

我的staging.py包含正確的CACHE和中間件設置。你可以看看nginx.confnginx conf file related to the site。我已經確認,memcached正在運行通過ngrep -d any port 11211

我打開緩存整個網站,並希望通過做ab -n 1000 -c 10 http://site.com

隨着緩存打開關閉看到的表現,我得到:

Concurrency Level:  10 
Time taken for tests: 10.276 seconds 
Complete requests:  1000 
Failed requests:  0 
Write errors:   0 
Total transferred:  11695000 bytes 
HTML transferred:  11559000 bytes 
Requests per second: 97.32 [#/sec] (mean) 
Time per request:  102.759 [ms] (mean) 
Time per request:  10.276 [ms] (mean, across all concurrent requests) 
Transfer rate:   1111.43 [Kbytes/sec] received 

隨着緩存打開,我得到:

Concurrency Level:  10 
Time taken for tests: 12.277 seconds 
Complete requests:  1000 
Failed requests:  0 
Write errors:   0 
Total transferred:  11695000 bytes 
HTML transferred:  11559000 bytes 
Requests per second: 81.45 [#/sec] (mean) 
Time per request:  122.771 [ms] (mean) 
Time per request:  12.277 [ms] (mean, across all concurrent requests) 
Transfer rate:   930.26 [Kbytes/sec] received 

我的網站是一個博客,從數據庫拉帖子 - 沒有什麼奇特的。

如果有人能讓我知道爲什麼網站實際上是用memcached緩慢下來的,我將不勝感激。當我使用memcached時,您可以看到「每秒請求數」實際上下降了!

但是,當我運行ab時(儘管讀寫計數器在測試期間升高),running memcached-top給了我no hits。我有memory available和memcached是not hogging增加內存。

編輯
我跑memcached -vv並得到some results。你可以看到memcached第一次打印出「STORED」,然後似乎沒有從緩存中發送它(不確定這一點)。現在我更加困惑。也許memcached & django接口正在工作,但最終的結果是它最好不運行memcached?

+0

http://pastebin.com/sAksJTar回來爲未知後 – ReadWriteCode 2012-01-05 04:35:38

+0

抱歉..新的鏈接應該現在的工作。 – Trewq 2012-01-05 04:46:31

+1

我不確定這裏的問題到底是什麼。你有沒有嘗試看到緩存命中率?我認爲與你分享mintcache可能是一件好事。 http://djangosnippets.org/snippets/155/ – 2012-01-05 08:18:23

回答

1

Trewq,很多不同的事情可能會出錯。你說你的機器不是分頁,但即使memcache存儲了結果,請求也不會返回。

我的理論:太短超時,壞司機,並可能是錯誤的CPU拱(86 VS _64)

超時

通常在-vv輸出(可能是-vvv)的SET行會有像命令,鍵,值和超時的語法。非常小的超時可能是memcache存儲問題,然後幾乎立即刷新該值。

<命令名稱> <鍵> <標誌> < exptime> <字節> [noreply] \ r \ n -​​

驅動

而且,有可能是與內存緩存驅動器的問題/你使用的MC作爲MC應該永遠不會阻止那麼久。您可以在執行bechmark運行之前和之後執行類似http://code.google.com/p/memcached/wiki/NewConfiguringServer#Inspecting_Running_Configuration的操作來檢查您的memcache服務狀態。

重點審計

前陣子我寫的劇本在這個問題Setting smaller buffer size for sys.stdin?審計的memcache -vv的輸出,看看如何平衡得到了以集​​。這已經有一段時間了,但我相信這對你有一些修補可能會有用。

這不是在維基統計提及,但有統計值來幫助你計算出,如果你的緩存是均衡 - https://github.com/memcached/memcached/blob/master/doc/protocol.txt#L409

超級理想的9/10請求都命中1個思念,實際上更可能6/10符合要求,低於60%的任何東西都在浪費記憶。

+0

我同意 - 在一個完美的世界裏,你的命中率將達到90%或更高。但是,你能證實你的說法:60%的命中率是效用的門檻嗎?或者,這是一種基於個人經驗的主觀風格? – 2012-01-09 16:45:39

+0

@Chris - 擁有幾個12GB陣列並在16小時「互聯網」日處理1到1500萬次綜合瀏覽量的客戶的人員體驗。當你的命中率低於60%的HLA環境時,這是一個鍵控不一致的跡象,這表明你在某個地方搞了一些用戶(退化/慢速服務) - 除了我的python腳本,我的一個好朋友寫了這個https ://github.com/nerdynick/MemcachedManager雖然一個警告的話我不知道它的穩定。 – David 2012-01-09 18:20:55

+0

@克里斯 - 差點忘了。另一個罪魁禍首。 60%的過期時間太短。我的方法通常有一箇中央配置文件,其中包含按類別(全局,模塊,所有用戶,某些用戶,單個用戶)細分的到期時間列表,並且啓動所有內容都將在將來過期一年。 – David 2012-01-09 18:23:43