共计 1599 个字符,预计需要花费 4 分钟才能阅读完成。
- 测试环境:
- 测试客户机 A:HP DL380G4,2 个双核 CPU,4G Ram,2 块 10k RPM SAS 盘做 raid 1,ext3
- Nginx 所在服务器 B:DELL R710,E5620 * 2,32G Ram,6 块盘 15K RPM SAS 盘做 raid 1+0,xfs
- Memcached 所在服务器 C:DELL R710,E5620 * 2,32G Ram,6 块盘 15K RPM SAS 盘做 raid 5,ext4
- Nginx 设置:keepalive 8192
- Php fpm 设置:listen.backlog = -1
- memcached 启动参数:memcached -d -m 24576 -p 12000 -c 10240
- 内核参数:
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_timestamps = 1
关于这几个内核参数对应的解释可参考资料:2.12. Reduce TCP performance spikes
- 测试方案:
- 使用 php 连接本地 nginx 代理,存取远程 memcached 数据;
- 使用 php 直接连接远程 memcached 服务器;
- 从测试客户端用 ab 发起并发测试;
- 并发线程从 64 开始,直到 2048,分别是 64 的 N 倍;
- 每种并发模式都进行 5 轮测试,最后取平均值;
- 存储在 memcached 中的 key 长度 96 个字符,value 长度 400 字符,总是随机生成;
- 测试结果:
结论及建议:
- Php 程序通过 HttpMemcMC 访问 memcache 和直接访问 memcached 的效率并没有太多损失;
- 采用 php 直接访问 memcached,失败的次数相比通过 HttpMemcMC 有较大增加,应该是 HttpMemcMC 在 keepalive 方面更有优势;
- 后续会在进行一次测试,调整 nginx、php 及内核相关参数,再做对比;
- 本次测试没有和正常的 http 请求混在一起对比,测试结果不具备绝对参考价值;
单从本次测试结果来看,HttpMemcMC 值得拥有
- 结果结果更新:
调整上述几个内核参数:
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_timestamps = 1
通过调整内核参数,调整 tcp 连接复用性提高 tcp 效率,新的测试结果如下:
备注:由于 2 次测试案例中,每并发线程请求数不一样,所以你会发现两边的数据无法直接对比,这是我的失误,抱歉。
- 补充小结:
调整完内核后:
1. 可以发现,HttpMemc 的平均效率只有 NativeMC 72.62%;
2. 调整内核 tcp 参数对提升 tcp 效率非常有帮助,Failed requests 次数完全为 0;
3. 由于可以提高 memcached 连接复用率以及对程序透明的好处,即便 HttpMemc 性能不如 NativeMC,损失并不是非常厉害,仍然是可以接受的;
Memcached 的详细介绍 :请点这里
Memcached 的下载地址 :请点这里
参考阅读:
Memcached 安装及启动脚本 http://www.linuxidc.com/Linux/2013-07/87641.htm
PHP 中使用 Memcached 的性能问题 http://www.linuxidc.com/Linux/2013-06/85883.htm
Ubuntu 下安装 Memcached 及命令解释 http://www.linuxidc.com/Linux/2013-06/85832.htm
Memcached 的安装和应用 http://www.linuxidc.com/Linux/2013-08/89165.htm
使用 Nginx+Memcached 的小图片存储方案 http://www.linuxidc.com/Linux/2013-11/92390.htm
Memcached 使用入门 http://www.linuxidc.com/Linux/2011-12/49516p2.htm