• 测试环境:

  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字符,总是随机生成;

  • 测试结果:

  

  

结论及建议:

  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效率,新的测试结果如下:

       

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

  • 补充小结:

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

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

Nginx HttpMemcModule和直接访问memcached效率对比测试相关推荐

  1. Nginx 禁止某 IP 访问

    导语 总有一些不怀好意的人来访问我的网站,而且频率还很高,所以就用简单的方式禁止访问,就用 Nginx 来实现. 创建黑名单 在 /usr/local/nginx/conf 目录下创建 blocksi ...

  2. memcached演练(2) 访问memcached服务

    通过上节<memcached演练(1) 搭建memcached服务>,已经成功在linux虚拟机上安装了memcached服务,并设置了自启动. STAT version 1.4.29 M ...

  3. 阿里云服务器ECS Linux系统分析nginx或apache当天访问最多的IP

    Linux 系统查询 nginx 或 apache 当天访问最多的 IP 方法,以一键安装包为例可以执行如下命令: cat /alidata/log/nginx/access/testweb.log ...

  4. 提高大数据量并发访问时效率

    最近在做windows服务方面的开发,主要用它来解决A服务和其他服务发送数据失败后,重新发送的问题. 为了提高大数据量并发访问时效率问题,要在多台服务器上安装服务并采用多线程,就像是超市的收银,利用多 ...

  5. python访问memcached

    2019独角兽企业重金招聘Python工程师标准>>> python访问memcached memcached介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态 ...

  6. nginx之静态资源访问和负载均衡的使用!

    一.前言 最近空闲时间稍微少了点,晚上下班一般会看会书,所以更新也就没有那么快了!这不最近在看之前买的书籍(今年真的要多看点书籍): 还有音视频接口和解封装框架,我差不多快捋顺了,其实之前很多人问的接 ...

  7. 通过Nginx配置多域名访问

    通过Nginx配置多域名访问 一.下载Nginx 访问Nginx官网选择对应版本和安装包:http://nginx.org/ 以下讲述为在Windows环境下配置Nginx进行多域名访问 二.Ngin ...

  8. nginx配置 vue打包后的项目 解决刷新页面404问题|nginx配置多端访问

    访问vue页面时,/# 使url看着不美观,使用 H5 history模式可以完美解决这个问题,但需要后端nginx帮助.接下来我们自己配置一下. 使用前端路由,但切换新路由时,想要滚动到页面顶部,或 ...

  9. 全网最详细的docker配置nginx http2 优化高速访问

    Nginx 从 1.13.9 版本开始加入了 HTTP/2 的 Server Push 功能,本文将介绍如何在 Nginx 下实现 HTTP/2 服务器推送 (Server Push) .这里我们首先 ...

最新文章

  1. 修改nw.js的exe文件使其请求管理员权限
  2. js 加alert后才能执行方法
  3. python echo服务器_python常用框架 echo server 的测试
  4. 程序员的数学笔记2--余数
  5. AGP与PCI-E的区别和PCI-E接口与PCI接口的区别
  6. 在 ASP.NET MVC Web 应用程序中输出 RSS Feeds
  7. C++求复数的角度_单词复数规则:tomato的复数究竟是加s还是es?
  8. python解析xml格式的excel_Python 读取二进制、HTML 、XML 格式存储的 Excel 文件
  9. 适合独自一人宅在家必追十部影片推荐下载观看
  10. 简述什么是SQL注入,写出简单的SQL注入语句。
  11. composer 安装php endroid/qrcode二维码应用,二维码里面添加logo
  12. 英语不好、数学不好能自学编程吗?自学编程出路如何?老程告诉你
  13. struts2文件上传和下载
  14. 做一个自由职业者是一种怎样的体验?
  15. 《大数据: Flume 多个Agent 串联(AvroSource、AvroSink)》
  16. 前端面经——腾讯暑期实习生
  17. 后台开发语言的比较 java php python asp.net ruby on rails
  18. echarts自定义拐点图片
  19. YouTube图片幻灯片分享技巧
  20. 三毛面经-MySql面试经历

热门文章

  1. JavaScript强化教程——对象的值传递和引用传递
  2. tomcat启动停在Initializing Spring root WebApplicationContext
  3. myeclipse 10创建maven项目
  4. ThinkPHP 模板循环输出 Volist 标签
  5. 各浏览器中for in顺序的差异
  6. mysql错误日志/var/log/mariadb/mariadb.log,二进制日志
  7. C语言关键字、标识符和注释
  8. PL/SQL:使用pragma restrict_references限制包权限
  9. eclipse 无法使用注解的两个解决方法
  10. ORA-01078与LRM-00109报错解决