十五年测试老手,长期负责WEB\APP 项目测试,目前主要负责团队管理工作。

memcached压力测试工具memslap使用说明

上一篇 / 下一篇  2012-12-30 00:24:09 / 个人分类:memcache

文章来源
  • 文章来源:【转载】

Memslap是memcached服务器的压力测试工具,它能产生可配置压力,如:线程、并发、连接、运行时间、覆盖、命中率、key的长度、value的长度、get/set比率等。另外,它还支持数据确认、失效时间确认、UDP、二进制协议,facebook检测等操作。51Testing软件测试网:We qu1j z8\)H

默认安装libmemcached之后,将自带memslap的工具。

7e`2Z7v z^(Ir5@2Z0

51Testing软件测试网5omG&@ o(v

/usr/local/bin/memslap --servers=127.0.0.1:21211  -T 8 -c 128  --cfg_cmd=/usr/local/bin/config --execute_number=10000051Testing软件测试网D D'T#o1A2{8L

servers : 127.0.0.1:21211
sAe)tmXmv0threads count: 8
-}s%z/bDRs8s0concurrency: 128
D$NBbG3C~0execute number: 100000

PZ].u ]^*j#L;M0

 51Testing软件测试网%g3w&z$v1hm

memcached压力测试工具memslap使用说明:51Testing软件测试网p`T#K*@dh

英文原版:http://www.krow.net/libmemcached/memslap.html

\JA I%Fp/t0

目录

E.xR H9tT;V{0

* 简介51Testing软件测试网X mW"N YL~/I
o 软件描述
^ wS }c'N"u2rN0o 使用方法
\}6~*K+] ZB0o 特色51Testing软件测试网x0fz#S3ipg
* 细节51Testing软件测试网 ?!nHf P
o 网络管理
Kk`X(SA:_0o 多线程和并发
)Du"z9|f^I3t/i0o key 和value51Testing软件测试网.n^)d9L1h&q'i/K,p
o 简单实用的任务调度51Testing软件测试网 D e lcvjP#S
o 多个server,UDP,TCP,多重get和二进制协议
A3E5N#HeF+~$elF0* 用法51Testing软件测试网W"o6F:P3\4V
o Key、value的长度和命令51Testing软件测试网%u b x*f&UjQ5O.U
o 多线程和并发51Testing软件测试网[ r8F7o(Cy4We df
o 窗口大小
7qf~X:L!g0o 确认
#?b8NE.e3C xl7W`W}0o 多服务器端和多客户端51Testing软件测试网1J3?gE(c
o 运行模式:时间模式、数量模式
6cw;rT4wr0o 定期清理静态数据51Testing软件测试网d\#[/_jom'Z*o
o 多重get51Testing软件测试网I-xt+K.q}7G
o UDP 和 TCP51Testing软件测试网wm{Q3PgQ
o Facebook 检测51Testing软件测试网zrQ't-dsq
o 复制任务
?%`4uYE!N0o 支持多tcp连接51Testing软件测试网\g4?"B ]v|3{%~
o 支持二进制协议
p!haR4C$K9v$n8@0* 配置文件
*ER;`qzxJ)E _V0* 命令选项

Mkc E%^$ek7a8re0

一、简介

Sg,n1d4VAo)d0

1.  软件描述

Y9? hM4{(Q8Q0

Memslap是memcached服务器的压力测试工具,它能产生可配置压力,如:线程、并发、连接、运行时间、覆盖、命中率、key的长度、value的长度、get/set比率等。另外,它还支持数据确认、失效时间确认、UDP、二进制协议,facebook检测等操作。51Testing软件测试网DU | wh5J}

Memslap管理网络连接的机制与memcached管理事件的机制相同。每个memslap线程绑定到一个cpu内核上,所有线程彼此不进行51Testing软件测试网k6Js O5iJLl

通信。每个线程有多个socket连接,每个socket连接保存一份其自己的key的长度、value的长度和命令(set/get)。

~6g+]7Ld2U0

2.  使用方法

&^1W$}}t'gC8v0

memslap [options]

[zfj!|l#},Z0

3.  软件特色

9v%c;x8~H-h @`0

Memslap有如下特点:51Testing软件测试网 l0L*P5HT

使用互斥libevent管理网络。51Testing软件测试网 L9ag0hc!Sd,a~

可以使用TCP和UDP进行无阻塞传输。

t?2L;XX x"?.Ku|0

提高并行量:高效的多线程环境。

O~8M'TC0

提高时间效率:快速的运算速度。

Q'@9Tte0B.d0

Key的长度和value的长度可以配置。

!o4z xvg@g w0

支持get、多重get和set命令,并且命令可以配置。

A5}|i%F+@C0

支持可控制的命中率和覆盖率。

|1J4JnW(},p'Q0

支持数据确认和失效时间确认。

*rkE3Z3XrUi0

支持定期清理固定数据51Testing软件测试网(um.qFgU,M

支持多tcp连接51Testing软件测试网2kIBZe

支持二进制协议51Testing软件测试网-c iB^'V[$G

支持facebook测试(通过TCP进行set,通过UDP进行多重get)和复制测试51Testing软件测试网'u!`A|@:}$w

二、细节51Testing软件测试网 W UsU(Er

1.  网络管理

NNA:Cd@0

对于memslap来说,TCP和UDP都采用无阻塞IO,其网络模型和memcached很相似,所有网络事件的管理如同memcached中的51Testing软件测试网)\pk2b [;tV

libevent的管理。libevent使memslap管理网络很有效。51Testing软件测试网(uNO!HW(|!uI

2.  多线程和并发

"jn%o1g tN0

Memslap多线程的实现机制和memcached相似。Memslap创建一个或多个能自我控制的线程,如果系统支持设置cpu环境,那么将51Testing软件测试网d/b'J v&flU

每个线程绑定到一个cpu内核上。

%e/z;f$gq)[ H']U'A0

另外,每个线程都有一个libevent去管理网络事件、一个或多个自我控制的并发、一个或多个socket连接。即使在一个线程中51Testing软件测试网0U cH.n`aD0S;F|

,所有并发彼此都不会进行通信。

rqSXJy7PQC+dP0

Memslap会创建多个socket连接,每个并发有多个socket连接。么个并发从socket连接池中随机或顺序选择一个socket连接运行

1Y O\'dOi(niH m0

。所以,memslap保证每个并发在任何时间都会有一个soket连接。用户可以根据所要的测试用例设定并发的数量和每个并发中

:H$ppb[w#^t0

的socket连接的数量。

S#^!iZ9QEi&dk [0

3.  Key和value

-dJ|(UV S0

为提升时间效率和空间利用率,memslap创建一个10M个文字的随机文字表。所有的key和value都是从这个表中随机产生的。

C}7o{g|6^C0

4.  简单实用的任务调度

7s&NJxtB[wc0

Memslap使用libevent去调度所有并发中的线程,每个并发调度任务基于任务窗口的大小。

puM6j,Wm0

5.  多个server,UDP,TCP,多重get和二进制协议51Testing软件测试网Orj{l)GLDG

由于每个线程是自我控制的,memslap可以将不同的线程分配到不同的memcached服务器上。这是memslap支持多个服务器的方法

6un PKFr0

之一。而唯一的约束条件是服务器的数量不能超过线程的数量。另一个方法是复制任务。51Testing软件测试网T SV ?!z)e"q RX,]

默认情况下,memslap进行单个get。如果用户设定多重get选项,memslap会收集足够多的get命令,并打包发送。51Testing软件测试网dju{]0r

Memslap支持ascII协议和二进制协议。不过,ascii协议时默认的协议。默认情况下memslap是用tcp协议,虽然也支持udp协议

5B z GI)E0

,但是udp协议不可靠,会有丢包和乱序的情况发生。为了解决udp协议的这个缺点,memslap创建一个内存池。51Testing软件测试网Ym0{ i&hd ^p

三、用法

*OK0c;M g%c;K0

用户至少要指定一个服务器端。

-Mg"O'B{1a4@+da0

1.  Key、value的长度和命令51Testing软件测试网Plj&s,X

Memslap对命令(set/get)的设置放在配置文件中,key的最短长度是16byte,最大长度是260byte。Value最小值是1byte,最

({ z2y#eA0

大值是1Mbyte。51Testing软件测试网!B VLE ^WU8i8b

2.  多线程和并发

3Gp[%Q e;r*a%K1u:W0

默认的线程数是1,并发数是16.用户可以使用“--thread”和“--concurrency”来设定线程数和并发数。

}Nc8WR"o8h-~H*p s0

3.  窗口大小

"vn3v2nza0

一般来说,用户不需要设定窗口大小,窗口的默认大小是10k。用户可以使用“--win_size”或“-w”指定窗口大小。

~-iA-}kG7h0

4.  确认51Testing软件测试网6C,Rj!E T{

用户可以使用“—verify=”或者“-v”选项来设置数据的确认。在理论上,memslap支持100%确认。用户可以使用“—

|/d`Q&b0

exp_verify=”或者“-e”选项来设定失效时间的确认。使用“--verbose”会产生更详细的错误信息。

qR*X `#F4Ws+^:iA`2k0

5.  多服务器、多客户端51Testing软件测试网3c-_&\d1h|8F1vt

Memslap支持多服务器端和多客户端,但是要注意服务器端的数量不能比线程数多。用户可以使用选项“—server=”或者“-s51Testing软件测试网Qi2Xq5d/|

”来指定多服务器端。51Testing软件测试网 Qk M!s9r)Z

6.  运行模式:时间模式、数量模式51Testing软件测试网2oJ kqk/D,\.^

默认模式是时间模式,默认时间是10分钟,如果到时,memslap推出。请不要同时使用两种模式。

!|!` UUiJ0

7.  定期清理静态数据

gGT^i'J!Xj9~{\0

使用选项“—stat_freq=”或者“-S”来设置时间间隔。51Testing软件测试网;T-@b/W;~$i`

8.  多重get

F-LzK _;[0

用户可以使用“--division”选项设置多重get的数量。Memslap的默认值是1,即单一get。51Testing软件测试网/}3uD[e#?l4zbGC

9.  UDP和TCP

ByA$KRB2j0

Memslap支持udp和tcp协议。对tcp来说,memslap在socket连接中断时不会重新连接。如果所有连接都丢失了,memslap会推出

1J[y(_z0

。如果用户使用了“--reconnect”选项,那么当socket连接丢失时,它会重新连接

8I(|?B(p:P0

用户可以使用“--udp”选项来启用udp,但是udp是有局限性的:

Rw6DlCA7|0

Udp不能set超过1400byte的数据

%[\tBWf:J7Ad0

Udp不支持二进制协议

:w s9K ~(_d0

不支持重新连接51Testing软件测试网0I*rB1n5sE1G

10.  Facebook检测51Testing软件测试网)L P_6E+^o

用tcp set数据,用udp多重get数据。使用一下选项:“—facebook –division=50”,如果你想创建多个tcp连接,使用选项

HiZ.hpU(a,V0

“—conn_sock=”。51Testing软件测试网&Bq IiF

11.  复制任务51Testing软件测试网2Tiw O @ZXb"}(k%La

若使用该特性,用户必须保证有两个(以上)memcached服务器。用户可以使用“—rep_write=”选项启动该特性

7a6E]-M M ZB0

12.  支持多tcp连接

9P1x(a!h?+|0

使用选项“—conn_sock=”或者“-n”。这个特性在socket断开后不支持重新连接。

-^J?z0T-I&o0s`0

13.  支持二进制协议51Testing软件测试网(ra+Q Fnc

使用选项“--binary”或者“-B”启动memslap。这个选项支持除了UDP以外的所有特性。

Q6GI7s9n:r\-a |*c+}l*k0

四、配置文档

P-{6p K(tYSn0T'A0

下面是配置文档的例子:51Testing软件测试网j+xn[`T

#comments should start with '#'51Testing软件测试网;n2pkVsiy9p+a(V

#key

#Z2}\+GEznN0

#start_len end_len proportion51Testing软件测试网b ?#g L m;k$V{

#51Testing软件测试网&A{N.{b;v |x

#key length range from start_len to end_len51Testing软件测试网N8Z$N$@%KbsbO0A

#start_len must be equal to or greater than 1651Testing软件测试网x#u?!h%sxVq

#end_len must be equal to or less than 250

M8s3X$M9@.}0

#start_len must be equal to or greater than end_len

_1H^|-JdZu6a0

#memslap will generate keys according to the key range

+d_&YB `X_;S0

#proportion: indicates keys generated from one range accounts for the total

L-HJ;y;z(]Jx0

generated keys

Y@kb8w-m7f%qf$Y0

#51Testing软件测试网so%yY8a\

#example1: key range 16~100 accounts for 80%51Testing软件测试网 wrm N o){e,iI

 key range 101~200 accounts for 10%51Testing软件测试网.x0w.o+|p

 key range 201~250 accounts for 10%51Testing软件测试网z8h:q0O1T,_1]0Sk,BK

 total should be 1 (0.8+0.1+0.1 = 1)

5`BD2F0u0

#51Testing软件测试网7H5^F{'M$K(F_

 16 100 0.8

Xk*e d]!T0

 101 200 0.1

,Xyr$J,Cp0

 201 249 0.1

t\EhF0Bq0

#

yP0RX/h ?D g???7A0

#example2: all keys length are 128 bytes

!O:c q-o;W7} g0

#

nJz/@o.?+[,N.M P@0

 128 128 151Testing软件测试网h f+F3T@ z-ufW ~F-ug

key51Testing软件测试网oh2F8Z9u x ^`

128 128 1

9~Bs0] zb0

#value51Testing软件测试网'pj+qL5X8S1l G(GH

#start_len end_len proportion

0Gk,YY$D*A2?C0

#

*qaG!M na0

#value length range from start_len to end_len51Testing软件测试网DVPMT4\

#start_len must be equal to or greater than 151Testing软件测试网Z3X!E$DO

#end_len must be equal to or less than 1M

!Yi+f(G L+s5fK0

#start_len must be equal to or greater than end_len

#aiKQ2joO0

#memslap will generate values according to the value range

7Bz`p @R2Fu(P-f0

#proportion: indicates values generated from one range accounts for the51Testing软件测试网z5rXyb8V,Uydm

total generated values

{X%G E6o#Q:n WCd0

#

Mx5Yr&?0

#example1: value range 1~1000 accounts for 80%51Testing软件测试网 FCE C+Yh9lk ]

 value range 1001~10000 accounts for 10%

_!rmtaz3|0

 value range 10001~100000 accounts for 10%

@hSzI7]@K0

 total should be 1 (0.8+0.1+0.1 = 1)51Testing软件测试网;c&_h)H)r3d P#qYa7R8M

#

T!B$^g jU3a1c7}0

 1 1000 0.8

P3K;Q'^Jg4C0

 1001 10000 0.1

:?"x#d!Fc?:?0

 10001 100000 0.151Testing软件测试网qZW0x9~$e7od

#51Testing软件测试网@c'Ron7u2V:o

#example2: all value length are 128 bytes51Testing软件测试网Q.EzO}Rl7P[

#51Testing软件测试网"jVLRp6F A

 128 128 1

%b0]7we z#?,Z:u%`VTQ/q0

value51Testing软件测试网(v-Gc*V/B4D/Fo%m

2048 2048 1

A\d*W6lU7u'@P:v0

#cmd

A4\?S1Q T(?`{9L0

#cmd_type cmd_proportion51Testing软件测试网 `8H4Xl.vb!p

#

|Et:n:WC4Q0A0

#currently memslap only supports get and set command.51Testing软件测试网@q%Hf ?-P+DR

#

P3qH_2B-^6D;Z0

#cmd_type51Testing软件测试网*L(Fd7Z#R&rq

#set  051Testing软件测试网:`aS;[#sf

#get  151Testing软件测试网1d;? M1h3JKg&M3e!t

#51Testing软件测试网:Ws1ESWkYvGgp

#example: set command accounts for 50%

T7o w%{u-p0S!?0

 get command accounts for 50%

[^/T]\pf0

 total should be 1 (0.5+0.5 = 1)51Testing软件测试网d#av$a P

#

(k,x(^ C|#gR$j0

 cmd

5n'w"{)y6}'HH0

 0  0.5

C0@y2]:Z"|bx0

 1  0.551Testing软件测试网"T'k#t)p2]N { x-|-S d

cmd

:{1?g5e6D9v0

 0.1

5Ch.^&p Jq?P0

 0.951Testing软件测试网!Gqb m&i*F*L:E3s0I


$T6_)v l:@Vt0五、命令选项51Testing软件测试网tx'V ^,?R W
-s, --servers=:列出一个或多个所要连接的memcached服务器端。服务器的数量一定要小于线程的数量e.g.: --51Testing软件测试网2h/C`;v H~+_

servers=localhost:1234,localhost:1121151Testing软件测试网~]FK;H[ r+k
-T, --threads=:线程数量,最好等于cpu数量。默认值为851Testing软件测试网;K2C&]9CU;C+GG
-c, --concurrency=:负载需要虚拟的并发数量,默认值是128
3|6Hh&u4vd@5{0-n, --conn_sock=:一个并发的tcp连接数量,默认值是1
B p:\,Z.[C X6g7[0-x, --execute_number=:set/get数量,默认值100w
9fi _5m]Ht*ur0-t, --time=:运行时间,其格式为: s-seconds, m-minutes, h-hours, d-days e.g.: --time=2h.
J;@'UCdnA4n&[1Q0-F, --cfg_cmd=:加载配置文件51Testing软件测试网im)g&Qw
-w, --win_size=:任务窗口大小,e.g.: --win_size=10k. 默认值为10k51Testing软件测试网RXnFm'pE)t
-X, --fixed_size=:value的大小51Testing软件测试网f*lB;\?EO
-v, --verify=:所要确认的数据比例, e.g.: --verify=0.01
MsJR.B_"SW0-d, --division=:多重get的数量,默认值为1即单个get51Testing软件测试网[o0j2} [._6p)\
-S, --stat_freq=:定期清理静态数据的间隔时间, e.g.: --resp_freq=10s.51Testing软件测试网(E$V0Wc2nk)K3`hcA
-e, --exp_verify=:失效时间的比例, e.g.: --exp_verify=0.01。默认情况是不设置该选项51Testing软件测试网R.[}0T+c9S(R0F
-o, --overwrite=:对象需要覆盖的比例, e.g.: --overwrite=0.01.默认情况是不进行覆盖。
&TYk I2iw g0P Kj?0-R, --reconnect:支持重新连接
N9_K;i-os&?\1OC0-U, --udp:使用UDP协议,默认是TCP协议
#IgJm(E:xU%D7O0-a, --facebook:启动faceb检测
[+w0BVS1i*aka0-B, --binary:使用二进制协议,默认值是ascii协议
:DP.rS8L1MX0-P, --tps=:吞吐量, e.g.: --tps=10k.51Testing软件测试网%w ^ot3n
-p, --rep_write=:前n个服务端可以写数据, e.g.: --rep_write=2.51Testing软件测试网r:w `$u4yY9U `"T4Wo
-b, --verbose:错误信息51Testing软件测试网VT8H^U F&u8D
-h, --help:帮助文档51Testing软件测试网4l X-T F7q`#OcHH
-V, --version:版本信息

!X~2S8^:{h&t0

&{$i$]/sw$LXvSB0 

1dXXq&G8Ld,H0

TAG: memcached

 

评分:0

我来说两句

Open Toolbar