Chr*_* W. 6 memory python cache memcached
我们正在使用 Newrelic 来衡量我们的 Python/Django 应用程序性能。Newrelic 报告说,在我们的系统中,“Memcached”正在平均12ms
响应命令。
深入到前十个左右的 Web 视图(按请求数),我可以看到有些Memcache get
占30ms
; 我无法Memcache get
在小于10ms
.
有关系统架构的更多详细信息:
~0.5ms
Memcached 的响应时间不是10ms
很慢吗?
据我了解,如果您认为“Memcache 太慢”那么“您做错了”。那我做错了吗?
这是memcache-top
命令的输出:
memcache-top v0.7 (default port: 11211, color: on, refresh: 3 seconds)
INSTANCE USAGE HIT % CONN TIME EVICT/s GETS/s SETS/s READ/s WRITE/s
cache1:11211 37.1% 62.7% 10 5.3ms 0.0 73 9 3958 84.6K
cache2:11211 42.4% 60.8% 11 4.4ms 0.0 46 12 3848 62.2K
cache3:11211 37.5% 66.5% 12 4.2ms 0.0 75 17 6056 170.4K
AVERAGE: 39.0% 63.3% 11 4.6ms 0.0 64 13 4620 105.7K
TOTAL: 0.1GB/ 0.4GB 33 13.9ms 0.0 193 38 13.5K 317.2K
(ctrl-c to quit.)
Run Code Online (Sandbox Code Playgroud)
** 这是top
在一台机器上的命令输出: ** (在所有集群机器上大致相同。如您所见,CPU 利用率非常低,因为这些机器只运行内存缓存。)
top - 21:48:56 up 1 day, 4:56, 1 user, load average: 0.01, 0.06, 0.05
Tasks: 70 total, 1 running, 69 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.3%st
Mem: 501392k total, 424940k used, 76452k free, 66416k buffers
Swap: 499996k total, 13064k used, 486932k free, 181168k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6519 nobody 20 0 384m 74m 880 S 1.0 15.3 18:22.97 memcached
3 root 20 0 0 0 0 S 0.3 0.0 0:38.03 ksoftirqd/0
1 root 20 0 24332 1552 776 S 0.0 0.3 0:00.56 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0
5 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kworker/u:0
6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
7 root RT 0 0 0 0 S 0.0 0.0 0:00.62 watchdog/0
8 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 cpuset
9 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
...output truncated...
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的研究表明这10ms
是“慢”的。我的意思是 memcache 文档本身将子1ms
时间称为“预期”。因此我们看到的响应时间慢了一个数量级。
对性能的期望: https: //code.google.com/p/memcached/wiki/NewPerformance
memcached 响应缓慢的“可能的罪魁祸首”似乎是(按可能性的粗略顺序):
我已经解决了几乎所有这些问题,如下所示:
memcached-top
(https://code.google.com/p/memcache-top/brutis
),我们从应用程序中获得的连接时间与运行时(https://code.google.com/p/brutis/)大致相同)来自那些相同的应用程序服务器。atop
我们正在使用的报告)盲目地设置这些配置选项并希望它们能够改进:
/sbin/sysctl -w net.ipv4.tcp_tw_recycle=1
/sbin/sysctl -w net.ipv4.tcp_tw_reuse=1
/sbin/sysctl -w net.ipv4.tcp_fin_timeout=10
Run Code Online (Sandbox Code Playgroud)结果没有变化。
我们基本上无法诊断这个问题。我们即将“安装 Redis”并希望它能更好地工作。
归档时间: |
|
查看次数: |
19529 次 |
最近记录: |