Nginx HttpMemcModule和直接访问memcached效率对比测试
程序员文章站
2023-11-19 15:14:16
测试环境: 测试客户机a: hp dl380g4,2个双核cpu,4g ram,2块10k rpm sas盘做raid 1,ext3 nginx所在服务器b:dell r7...
测试环境:
测试客户机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 = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_timestamps = 1
通过调整内核参数,调整tcp连接复用性提高tcp效率,新的测试结果如下:
补充小结:
调整完内核后:
1. 可以发现,httpmemc的平均效率只有nativemc 72.62%;
2. 调整内核tcp参数对提升tcp效率非常有帮助,failed requests次数完全为0;
3. 由于可以提高memcached连接复用率以及对程序透明的好处,即便httpmemc性能不如nativemc,损失并不是非常厉害,仍然是可以接受的;
测试客户机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 = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_timestamps = 1
通过调整内核参数,调整tcp连接复用性提高tcp效率,新的测试结果如下:
备注:由于2次测试案例中,每并发线程请求数不一样,所以你会发现两边的数据无法直接对比,这是我的失误,抱歉。
补充小结:
调整完内核后:
1. 可以发现,httpmemc的平均效率只有nativemc 72.62%;
2. 调整内核tcp参数对提升tcp效率非常有帮助,failed requests次数完全为0;
3. 由于可以提高memcached连接复用率以及对程序透明的好处,即便httpmemc性能不如nativemc,损失并不是非常厉害,仍然是可以接受的;
上一篇: 在Nginx用htpasswd对网站进行密码保护的设置方法
下一篇: Vim中宏命令的使用实例详解