Nginx HttpMemcModule和直接访问memcached效率对比测试

简介:
  • 测试环境:

  1. 测试客户机A: HP DL380G4,2个双核CPU,4G Ram,2块10k RPM SAS盘做raid 1,ext3

  2. Nginx所在服务器B:DELL R710,E5620 * 2,32G Ram,6块盘15K RPM SAS盘做raid 1+0,xfs

  3. Memcached所在服务器C:DELL R710,E5620 * 2,32G Ram,6块盘15K RPM SAS盘做raid 5,ext4

  4. Nginx设置:keepalive 8192

  5. Php fpm设置:listen.backlog = -1

  6. memcached启动参数:memcached -d -m 24576 -p 12000 -c 10240

  7. 内核参数:

net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_timestamps = 1

关于这几个内核参数对应的解释可参考资料:2.12. Reduce TCP performance spikes

  • 测试方案:

  1. 使用php连接本地nginx代理,存取远程memcached数据;

  2. 使用php直接连接远程memcached服务器;

  3. 从测试客户端用ab发起并发测试;

  4. 并发线程从64开始,直到2048,分别是64的N倍;

  5. 每种并发模式都进行5轮测试,最后取平均值;

  6. 存储在memcached中的key长度96个字符,value长度400字符,总是随机生成;

  • 测试结果:

NginxHttpMemcMC-vs-NativeMC-benchmark-2013091301  NginxHttpMemcMC-vs-NativeMC-benchmark-2013091302

NginxHttpMemcMC-vs-NativeMC-benchmark-2013091303  NginxHttpMemcMC-vs-NativeMC-benchmark-2013091304

结论及建议:

  1. Php程序通过HttpMemcMC访问memcache和直接访问memcached的效率并没有太多损失;

  2. 采用php直接访问memcached,失败的次数相比通过HttpMemcMC有较大增加,应该是HttpMemcMC在keepalive方面更有优势;

  3. 后续会在进行一次测试,调整nginx、php及内核相关参数,再做对比;

  4. 本次测试没有和正常的http请求混在一起对比,测试结果不具备绝对参考价值;

单从本次测试结果来看,HttpMemcMC值得拥有 :)

  • 结果结果更新:

调整上述几个内核参数:

net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_timestamps = 1

通过调整内核参数,调整tcp连接复用性提高tcp效率,新的测试结果如下:

NginxHttpMemcMC-vs-NativeMC-benchmark-2013091305   NginxHttpMemcMC-vs-NativeMC-benchmark-2013091306 NginxHttpMemcMC-vs-NativeMC-benchmark-2013091307   NginxHttpMemcMC-vs-NativeMC-benchmark-2013091308

备注:由于2次测试案例中,每并发线程请求数不一样,所以你会发现两边的数据无法直接对比,这是我的失误,抱歉。

  • 补充小结:

调整完内核后:
1. 可以发现,HttpMemc的平均效率只有NativeMC 72.62%;
2. 调整内核tcp参数对提升tcp效率非常有帮助,Failed requests次数完全为0;
3. 由于可以提高memcached连接复用率以及对程序透明的好处,即便HttpMemc性能不如NativeMC,损失并不是非常厉害,仍然是可以接受的;


本文转自叶金荣51CTO博客,原文链接:http://blog.51cto.com/imysql/1879883,如需转载请自行联系原作者

相关文章
|
11天前
|
Web App开发 算法 应用服务中间件
nginx开启局域网https访问
【10月更文挑战第22天】为了调试WebRTC功能,需要在局域网内搭建HTTPS协议。具体步骤包括:在已部署Nginx和安装OpenSSL的环境中生成私钥、证书签名请求和自签名证书;将生成的文件放置到Nginx的证书目录并修改Nginx配置文件,最后重启Nginx服务。注意,自签名证书不受第三方机构认可,如需正式使用,需向CA申请签名。
|
1月前
|
应用服务中间件 Shell PHP
windows系统配置nginx环境运行pbootcms访问首页直接404的问题
windows系统配置nginx环境运行pbootcms访问首页直接404的问题
|
2月前
|
SQL JavaScript 前端开发
基于Python访问Hive的pytest测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Python、来开发Hive应用的方法,产生的代码如下
69 6
基于Python访问Hive的pytest测试代码实现
|
1月前
|
前端开发 JavaScript 应用服务中间件
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
本文是一篇详细的教程,介绍了如何在Linux系统上安装和配置nginx,以及如何将打包好的前端项目(如Vue或React)上传和部署到服务器上,包括了常见的错误处理方法。
265 0
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
|
28天前
|
网络协议 Ubuntu 前端开发
好好的容器突然起不来,经定位是容器内无法访问外网了?测试又说没改网络配置,该如何定位网络问题
本文记录了一次解决前端应用集成到主应用后出现502错误的问题。通过与测试人员的沟通,最终发现是DNS配置问题导致的。文章详细描述了问题的背景、沟通过程、解决方案,并总结了相关知识点和经验教训,帮助读者学习如何分析和定位网络问题。
|
2月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
45 2
|
2月前
|
SQL JavaScript 前端开发
基于Java访问Hive的JUnit5测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Java、来开发Hive应用的方法,产生的代码如下
71 6
|
1月前
|
NoSQL 网络协议 应用服务中间件
redis,memcached,nginx网络组件
redis,memcached,nginx网络组件
17 0
|
3月前
|
应用服务中间件 nginx Docker
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
这篇文章介绍了如何通过域名在本地访问虚拟机上的nginx服务,包括创建nginx容器、修改配置文件、修改本地host文件以及进行访问测试的详细步骤。文章提供了具体的Docker命令来创建并配置nginx容器,展示了配置文件的修改示例,说明了如何在本地系统的hosts文件中添加虚拟机IP和自定义域名,以及如何通过浏览器进行测试访问。
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
|
2月前
|
Ubuntu 应用服务中间件 数据库
Nginx配置:阻止非国内IP地址访问的设置方法
此外,出于用户隐私和法律合规性的考虑,应慎重考虑阻止特定国家或地区IP地址的决策。在某些情况下,这可能被视为歧视性或违反当地法律。
146 2