设为首页 收藏本站
查看: 1640|回复: 0

[经验分享] memcached性能测试

[复制链接]

尚未签到

发表于 2018-12-25 08:41:01 | 显示全部楼层 |阅读模式

  + 首页>>技能>>性能测试>>内容
  缓存服务器memcached性能测试500+次围观2013-10-29 | 来自 Kiven
DSC0000.jpg

  Twemperf又名mcperf,是一款memcached的性能测试工具。Mcperf就像httperf,但它基于memcached的协议,它使用memcached的ASCII协议并且能够快速的产生大量memcached连接和请求。该工具主要用于memcached性能测试,模拟大并发set、get等的操作。
下载
  我们可以通过下面的链接来获取mcperf:
  https://github.com/twitter/twemperf
安装
  下载后,传到任意一台服务器上(注:只能在linux上运行)解压安装.
  在debug模式下构建源码:
CFLAGS="-ggdb3 -O0" ./configure --enable-debug  
make
  
sudo make install
  好,到此,mcperf则已全部安装完成。 Github上还有另外一种构建方式:
git clone git://github.com/twitter/twemperf.git  
cd twemperf
  
autoreconf -fvi
  
CFLAGS="-ggdb3 -O0" ./configure --enable-debug
  
make
  
src/mcperf -h
  因为此方法没有试验,所以我们不讨论此安装方法。
使用方法
  Github上给出了两个简单的例子来说明mcperf的使用方法。 第一种:创建1000个并发连接,来连接本机的11211端口(此端口是该工具的默认端口),连接创建的速度是每秒1000个,每一个连接发送“set”请求10次(相当于迭代10次),这10次请求在每秒1000的请求的速度下发送,发送的数据大小在(也就是存入到memcached中的value的大小)1~16个字节中正态分布。命令如下:
mcperf --linger=0 --timeout=5 --conn-rate=1000 --call-rate=1000 --num-calls=10 --num-conns=1000 --sizes=u1,16  Total: connections 1000 requests 10000 responses 10000 test-duration 1.009 s
  Connection rate: 991.1 conn/s (1.0 ms/conn   Response rate: 9910.5 rsp/s (0.1 ms/rsp)

  Response>  Response time [ms]: avg 0.2 min 0.1 max 13.4 stddev 0.00
  Response time [ms]: p25 1.0 p50 1.0 p75 1.0
  Response time [ms]: p95 1.0 p99 1.0 p999 1.0
  Response type: stored 10000 not_stored 0 exists 0 not_found 0
  Response type: num 0 deleted 0 end 0 value 0
  Response type: error 0 client_error 0 server_error 0
  Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
  Errors: fd-unavail 0 ftab-full 0 addrunavail 0 other 0
  CPU time : user 0.64 system 0.35 (user 63.6% system 35.1% total 98.7%)
  Net I/O: bytes 428.7 KB rate 424.8 KB/s (3.5*10^6 bps)
  第二种:创建100个连接,来连接本机的11211端口,每一个连接在上一个连接断开后创建,每一个连接发送100个“set”请求,每一个请求是在收到上一个请求的响应之后创建,发送的数据大小是1个字节。
mcperf --linger=0 --call-rate=0 --num-calls=100 --conn-rate=0 --num-conns=100 --sizes=d1  Total: connections 100 requests 10000 responses 10000 test-duration 1.268 s
  Connection rate: 78.9 conn/s (12.7 ms/conn   Response rate: 7886.1 rsp/s (0.1 ms/rsp)

  Response>  Response time [ms]: avg 0.1 min 0.1 max 1.0 stddev 0.00
  Response time [ms]: p25 1.0 p50 1.0 p75 1.0
  Response time [ms]: p95 1.0 p99 1.0 p999 1.0
  Response type: stored 10000 not_stored 0 exists 0 not_found 0
  Response type: num 0 deleted 0 end 0 value 0
  Response type: error 0 client_error 0 server_error 0
  Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
  Errors: fd-unavail 0 ftab-full 0 addrunavail 0 other 0
  CPU time : user 0.51 system 0.75 (user 40.0% system 59.0% total 99.0%)
  Net I/O: bytes 351.6 KB rate 277.2 KB/s (2.3*10^6 bps)
  官方对每一个参数的解释:
  Usage: mcperf [-?hV] [-v verbosity level] [-o output file]
  [-s server] [-p port] [-H] [-t timeout] [-l linger]
  [-b send-buffer] [-B recv-buffer] [-D]
  [-m method] [-e expiry] [-q] [-P prefix]
  [-c client] [-n num-conns] [-N num-calls]

  [-r conn-rate] [-R call-rate] [-z>  Options:
  -h, –help            : this help
  -V, –version         : show version and exit
  -v, –verbosity=N     : set logging level (default: 5, min: 0, max: 11)
  -o, –output=S        : set logging file (default: stderr)
  -s, –server=S        : set the hostname of the server (default: localhost)
  -p, –port=N          : set the port number of the server (default: 11211)
  -H, –print-histogram : print response time histogram
  …
  -t, –timeout=X       : set the connection and response timeout in sec (default: 0.0 sec)
  -l, –linger=N        : set the linger timeout in sec, when closing TCP connections (default: off)

  -b, –send-buffer=N   : set socket send buffer>
  -B, –recv-buffer=N   : set socket recv buffer>  -D, –disable-nodelay : disable tcp nodelay
  …
  -m, –method=M        : set the method to use when issuing memcached request (default: set)
  -e, –expiry=N        : set the expiry value in sec for generated requests (default: 0 sec)
  -q, –use-noreply     : set noreply for generated requests
  -P, –prefix=S        : set the prefix of generated keys (default: mcp:)
  …
  -c, –client=I/N      : set mcperf instance to be I out of total N instances (default: 0/1)
  -n, –num-conns=N     : set the number of connections to create (default: 1)
  -N, –num-calls=N     : set the number of calls to create on each connection (default: 1)
  -r, –conn-rate=R     : set the connection creation rate (default: 0 conns/sec)
  -R, –call-rate=R     : set the call creation rate (default: 0 calls/sec)

  -z, –sizes=R         : set the distribution for item>  …
  我大致翻译了一下,其中文解释如下:
  Options:
  -h, –help            : 显示帮助
  -V, –version         : 显示版本
  -v, –verbosity=N     : 设置日志级别(默认为5,最小0,最大11)
  -o, –output=S        : 设置日志文件(默认输出标准错误)
  -s, –server=S        : 设置需要测试的服务器(默认是本机)
  -p, –port=N          : 设置需要测试的端口(默认是11211)
  -H, –print-histogram :打印响应时间的柱状图
  …
  -t, –timeout=X       : 设置链接和响应的超时时间(默认是0秒)
  -l, –linger=N        : 设置TCP连接的断开时间(默认不开启)
  -b, –send-buffer=N   : 设置socket发送缓冲区大小(默认是4096字节)
  -B, –recv-buffer=N   : 设置socket接收缓冲区大小(默认是16384字节)
  -D, –disable-nodelay : 显示TCP延迟
  …
  -m, –method=M        : memcached的一些基本操作(例如set、get、add、delete等)
  -e, –expiry=N        : set the expiry value in sec for generated requests (default: 0 sec)
  -q, –use-noreply     : set noreply for generated requests
  -P, –prefix=S        : set the prefix of generated keys (default: mcp:)
  …
  -c, –client=I/N      : set mcperf instance to be I out of total N instances (default: 0/1)
  -n, –num-conns=N     :设置连接数(默认是1)
  -N, –num-calls=N     : 设置每一个连接发送的请求数(默认是1)
  -r, –conn-rate=R     : 设置每秒建立多少个连接(默认是每秒0个连接,每一个连接在上一个连接断开后创建)
  -R, –call-rate=R     : 设置每秒发送的请求数(默认是每秒0个请求,每一个请求在上一个请求响应后发送)
  -z, –sizes=R         : 发送存储数据的大小(默认是1个字节)
使用场景
  对致友平台环境中的memcached进行性能测试
  其结果中:
  Total:显示总的连接数,总的请求数,总的响应数以及测试所花费的时间。
  Connection rate:实际每秒的连接数
  Connection time:实际每个连接花费的时间(包括连接时间,set时间等)
  Connect time:连接所花费的时间(仅仅是连接所用的时间)
  Request rate:每秒的请求数

  Request>  Response rate:每秒的响应数

  Response>  Response time:响应的时间(单位毫秒)
  Response type:stored表示存储的数量,not_stored表示没有存储的数量,
  exists表示已经存在的数量(add时候用到),not_found表示没有找到的数量(get时候用到)
  再后面的参数没有较大意义,故此不解释。
实际测试结果
  使用mcperf对致友平台memcached进行测试后,发现一些重要的结果,对于整个致友平台架构部署以及我们客户端代码的优化有着重要意义。
  下面是本次使用mcperf对memcached进行性能测试所得的简要结果报告。
  测试环境: 操作系统:centos-5.5-x86_64 内存:1G CPU:1核
1.1.1 结论一
  由以上图表可见,存储的数据越大,则随着并发数的上升memcached处理请求的速度下降越明显。
  因此,存储数据不宜过大,如果确实要存储较大数据,建议拆分成两个或多个key存储。
  单机部署,每线程迭代10000次,发送数据100字节
DSC0001.png

  单机部署,每线程迭代10000次,发送数据1024字节
DSC0002.png

  集群部署,每线程迭代10000次,发送数据100字节
DSC0003.png

  集群部署,每线程迭代10000次,发送数据1024字节
DSC0004.png

4.1.2 结论二
  由以上图标显示,用户并发请求情况下,memcached集群部署能够提升请求效率,并且并发用户数越大,
  集群部署提升的性能越明显(平均耗时小,吞吐量大)。
  图略…
1.1.2 结论三
  Memcached中key(键)最大允许250个英文字符或27个中文字,超过这些最大值,则数据无法存储。另外,官方文档指出,value(值)最大允许存储1M的数据,超过1M的数据无法存储(不会存储)。因此建议,key不宜太大,value也不宜过大,如果value超过1M,建议存储到两个或多个key中。
1.1.3  结论四
  Memcached内存存储满数据之后,之后再存储的数据不会再消耗内存,最老的数据会被删除(LRU算法),memcached启动参数默认是开启LRU(近期最少使用算法)的。如果启动参数加上-M则不开启LRU算法,此时如果内存已满再存放数据则会报错。 由上面的图标可得,当存放的数据大小变化不是很大时,尽量将growth_factor(增长因子)的值设小(最小为1,但是不能是1,默认为1.25),此参数在memcached启动时指定:-f 1.25。该参数的设置根据存储数据大小决定。根据实际测试几百字节(

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-655497-1-1.html 上篇帖子: (十一)、memcached部署 下篇帖子: Spring MVC整合Memcached基于注释的实践使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表