我有一个由nginx和django提供服务的网站。
我的staging.py正确包含CACHE和中间件设置。您可以查看nginx.conf和nginx 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 :(得分:1)
Trewq,很多不同的事情可能会出错。你说你的机器没有分页,但即使memcache存储结果,获取请求也不会回来。
我的理论:太短暂的时间,糟糕的驱动程序,以及可能错误的CPU拱门(x86 vs _64)
通常在-vv输出(可能是-vvv)中,SET行将具有命令,键,值和超时等语法。非常小的超时可能是memcache存储的问题,然后几乎立即刷新值。
<命令名称> <键> <标志> < exptime> <字节> [noreply] \ r \ n - https://github.com/memcached/memcached/blob/master/doc/protocol.txt
此外,您使用的memcache驱动程序/ api可能存在问题,因为mc永远不会阻塞那么久。您可以在执行bechmark运行之前和之后通过执行此类http://code.google.com/p/memcached/wiki/NewConfiguringServer#Inspecting_Running_Configuration之类的操作来检查您的memcache服务状态。
前段时间我在这个问题Setting smaller buffer size for sys.stdin?中编写了脚本,以审核memcache -vv的输出,以了解GET对SET的平衡性。已经有一段时间了,但我相信它可能会对你有所帮助。
在wiki中没有提到stat,但是有一些统计值可以帮助你弄清楚你的缓存是否平衡 - https://github.com/memcached/memcached/blob/master/doc/protocol.txt#L409
超级理想是9/10请求命中1次未命中,现实更可能是6/10命中请求,任何低于60%的任何内容都在浪费记忆。