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

[经验分享] memcached压力测试工具memslap使用说明

[复制链接]

尚未签到

发表于 2018-12-26 06:05:54 | 显示全部楼层 |阅读模式
  Memslap是memcached服务器的压力测试工具,它能产生可配置压力,如:线程、并发、连接、运行时间、覆盖、命中率、key的长度、value的长度、get/set比率等。另外,它还支持数据确认、失效时间确认、UDP、二进制协议,facebook检测等操作。
  默认安装libmemcached之后,将自带memslap的工具。
  /usr/local/bin/memslap --servers=127.0.0.1:21211  -T 8 -c 128   --cfg_cmd=/usr/local/bin/config --execute_number=100000
  servers : 127.0.0.1:21211
  threads count: 8
  concurrency: 128
  execute number: 100000
  memcached压力测试工具memslap使用说明:
  英文原版:http://www.krow.net/libmemcached/memslap.html
  目录
  * 简介
  o 软件描述
  o 使用方法
  o 特色
  * 细节
  o 网络管理
  o 多线程和并发
  o key 和value
  o 简单实用的任务调度
  o 多个server,UDP,TCP,多重get和二进制协议
  * 用法
  o Key、value的长度和命令
  o 多线程和并发
  o 窗口大小
  o 确认
  o 多服务器端和多客户端
  o 运行模式:时间模式、数量模式
  o 定期清理静态数据
  o 多重get
  o UDP 和 TCP

  o>  o 复制任务
  o 支持多tcp连接
  o 支持二进制协议
  * 配置文件
  * 命令选项
  一、简介
  1.       软件描述
  Memslap是memcached服务器的压力测试工具,它能产生可配置压力,如:线程、并发、连接、运行时间、覆盖、命中率、key的长度、value的长度、get/set比率等。另外,它还支持数据确认、失效时间确认、UDP、二进制协议,facebook检测等操作。
  Memslap管理网络连接的机制与memcached管理事件的机制相同。每个memslap线程绑定到一个cpu内核上,所有线程彼此不进行
  通信。每个线程有多个socket连接,每个socket连接保存一份其自己的key的长度、value的长度和命令(set/get)。
  2.       使用方法
  memslap [options]
  3.       软件特色
  Memslap有如下特点:
  使用互斥libevent管理网络。
  可以使用TCP和UDP进行无阻塞传输。
  提高并行量:高效的多线程环境。
  提高时间效率:快速的运算速度。
  Key的长度和value的长度可以配置。
  支持get、多重get和set命令,并且命令可以配置。
  支持可控制的命中率和覆盖率。
  支持数据确认和失效时间确认。
  支持定期清理固定数据
  支持多tcp连接
  支持二进制协议
  支持facebook测试(通过TCP进行set,通过UDP进行多重get)和复制测试
  二、细节
  1.       网络管理
  对于memslap来说,TCP和UDP都采用无阻塞IO,其网络模型和memcached很相似,所有网络事件的管理如同memcached中的
  libevent的管理。libevent使memslap管理网络很有效。
  2.       多线程和并发
  Memslap多线程的实现机制和memcached相似。Memslap创建一个或多个能自我控制的线程,如果系统支持设置cpu环境,那么将
  每个线程绑定到一个cpu内核上。
  另外,每个线程都有一个libevent去管理网络事件、一个或多个自我控制的并发、一个或多个socket连接。即使在一个线程中
  ,所有并发彼此都不会进行通信。
  Memslap会创建多个socket连接,每个并发有多个socket连接。么个并发从socket连接池中随机或顺序选择一个socket连接运行
  。所以,memslap保证每个并发在任何时间都会有一个soket连接。用户可以根据所要的测试用例设定并发的数量和每个并发中
  的socket连接的数量。
  3.       Key和value
  为提升时间效率和空间利用率,memslap创建一个10M个文字的随机文字表。所有的key和value都是从这个表中随机产生的。
  4.       简单实用的任务调度
  Memslap使用libevent去调度所有并发中的线程,每个并发调度任务基于任务窗口的大小。
  5.       多个server,UDP,TCP,多重get和二进制协议
  由于每个线程是自我控制的,memslap可以将不同的线程分配到不同的memcached服务器上。这是memslap支持多个服务器的方法
  之一。而唯一的约束条件是服务器的数量不能超过线程的数量。另一个方法是复制任务。
  默认情况下,memslap进行单个get。如果用户设定多重get选项,memslap会收集足够多的get命令,并打包发送。
  Memslap支持ascII协议和二进制协议。不过,ascii协议时默认的协议。默认情况下memslap是用tcp协议,虽然也支持udp协议
  ,但是udp协议不可靠,会有丢包和乱序的情况发生。为了解决udp协议的这个缺点,memslap创建一个内存池。
  三、用法
  用户至少要指定一个服务器端。
  1.       Key、value的长度和命令
  Memslap对命令(set/get)的设置放在配置文件中,key的最短长度是16byte,最大长度是260byte。Value最小值是1byte,最
  大值是1Mbyte。
  2.       多线程和并发
  默认的线程数是1,并发数是16.用户可以使用“--thread”和“--concurrency”来设定线程数和并发数。
  3.       窗口大小
  一般来说,用户不需要设定窗口大小,窗口的默认大小是10k。用户可以使用“--win_size”或“-w”指定窗口大小。
  4.       确认
  用户可以使用“—verify=”或者“-v”选项来设置数据的确认。在理论上,memslap支持100%确认。用户可以使用“—
  exp_verify=”或者“-e”选项来设定失效时间的确认。使用“--verbose”会产生更详细的错误信息。
  5.       多服务器、多客户端
  Memslap支持多服务器端和多客户端,但是要注意服务器端的数量不能比线程数多。用户可以使用选项“—server=”或者“-s
  ”来指定多服务器端。
  6.       运行模式:时间模式、数量模式
  默认模式是时间模式,默认时间是10分钟,如果到时,memslap推出。请不要同时使用两种模式。
  7.       定期清理静态数据
  使用选项“—stat_freq=”或者“-S”来设置时间间隔。
  8.       多重get
  用户可以使用“--division”选项设置多重get的数量。Memslap的默认值是1,即单一get。
  9.       UDP和TCP
  Memslap支持udp和tcp协议。对tcp来说,memslap在socket连接中断时不会重新连接。如果所有连接都丢失了,memslap会推出
  。如果用户使用了“--reconnect”选项,那么当socket连接丢失时,它会重新连接
  用户可以使用“--udp”选项来启用udp,但是udp是有局限性的:
  Udp不能set超过1400byte的数据
  Udp不支持二进制协议
  不支持重新连接
  10.  Facebook检测
  用tcp set数据,用udp多重get数据。使用一下选项:“—facebook –division=50”,如果你想创建多个tcp连接,使用选项
  “—conn_sock=”。
  11.  复制任务
  若使用该特性,用户必须保证有两个(以上)memcached服务器。用户可以使用“—rep_write=”选项启动该特性
  12.  支持多tcp连接
  使用选项“—conn_sock=”或者“-n”。这个特性在socket断开后不支持重新连接。
  13.  支持二进制协议
  使用选项“--binary”或者“-B”启动memslap。这个选项支持除了UDP以外的所有特性。
  四、配置文档
  下面是配置文档的例子:
  #comments should start with '#'
  #key
  #start_len end_len proportion
  #
  #key length range from start_len to end_len
  #start_len must be equal to or greater than 16
  #end_len must be equal to or less than 250
  #start_len must be equal to or greater than end_len
  #memslap will generate keys according to the key range
  #proportion: indicates keys generated from one range accounts for the total
  generated keys
  #
  #example1: key range 16~100 accounts for 80%
  #          key range 101~200 accounts for 10%
  #          key range 201~250 accounts for 10%
  #          total should be 1 (0.8+0.1+0.1 = 1)
  #
  #          16 100 0.8
  #          101 200 0.1
  #          201 249 0.1
  #
  #example2: all keys length are 128 bytes
  #
  #          128 128 1
  key
  128 128 1
  #value
  #start_len end_len proportion
  #
  #value length range from start_len to end_len
  #start_len must be equal to or greater than 1
  #end_len must be equal to or less than 1M
  #start_len must be equal to or greater than end_len
  #memslap will generate values according to the value range
  #proportion: indicates values generated from one range accounts for the
  total generated values
  #
  #example1: value range 1~1000 accounts for 80%
  #          value range 1001~10000 accounts for 10%
  #          value range 10001~100000 accounts for 10%
  #          total should be 1 (0.8+0.1+0.1 = 1)
  #
  #          1 1000 0.8
  #          1001 10000 0.1
  #          10001 100000 0.1
  #
  #example2: all value length are 128 bytes
  #
  #          128 128 1
  value
  2048 2048 1
  #cmd
  #cmd_type cmd_proportion
  #
  #currently memslap only supports get and set command.
  #
  #cmd_type
  #set     0
  #get     1
  #
  #example: set command accounts for 50%
  #         get command accounts for 50%
  #         total should be 1 (0.5+0.5 = 1)
  #
  #         cmd
  #         0    0.5
  #         1    0.5
  cmd
  0   0.1
  1   0.9
  五、命令选项
  -s, --servers=:列出一个或多个所要连接的memcached服务器端。服务器的数量一定要小于线程的数量e.g.: --
  servers=localhost:1234,localhost:11211
  -T, --threads=:线程数量,最好等于cpu数量。默认值为8
  -c, --concurrency=:负载需要虚拟的并发数量,默认值是128
  -n, --conn_sock=:一个并发的tcp连接数量,默认值是1
  -x, --execute_number=:set/get数量,默认值100w
  -t, --time=:运行时间,其格式为: s-seconds, m-minutes, h-hours, d-days e.g.: --time=2h.
  -F, --cfg_cmd=:加载配置文件
  -w, --win_size=:任务窗口大小,e.g.: --win_size=10k. 默认值为10k
  -X, --fixed_size=:value的大小
  -v, --verify=:所要确认的数据比例, e.g.: --verify=0.01
  -d, --division=:多重get的数量,默认值为1即单个get
  -S, --stat_freq=:定期清理静态数据的间隔时间, e.g.: --resp_freq=10s.
  -e, --exp_verify=:失效时间的比例, e.g.: --exp_verify=0.01。默认情况是不设置该选项
  -o, --overwrite=:对象需要覆盖的比例, e.g.: --overwrite=0.01.默认情况是不进行覆盖。
  -R, --reconnect:支持重新连接
  -U, --udp:使用UDP协议,默认是TCP协议
  -a, --facebook:启动faceb检测
  -B, --binary:使用二进制协议,默认值是ascii协议
  -P, --tps=:吞吐量, e.g.: --tps=10k.
  -p, --rep_write=:前n个服务端可以写数据, e.g.: --rep_write=2.
  -b, --verbose:错误信息
  -h, --help:帮助文档
  -V, --version:版本信息


运维网声明 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-655808-1-1.html 上篇帖子: linux下安装Memcached提高网站读取速度 下篇帖子: 详细步骤:在64位Linux上安装Memcached-FlyHome
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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