主要信息来自:http://code.google.com/p/tcpcopy/51Testing软件测试网#ki7p5cr5f
tcpcopy是一个基于底层的应用请求复制(所有基于tcp的packets)开源项目,可用于替代ab做在线模拟压力测试,可转发各种在线请求到测试服务器上,进行较为详尽的近乎实际的测试,从而避免了新业务、系统上线带来的潜在问题。
%`x oH
WRd0
tcpcopy的四大功能:
$R yS)b(C.D0
1)分布式压力测试,将多个前段请求集中到某个后端进行压力测试51Testing软件测试网
U:b*x5H!\)eo+H1b
2)上线前测试,检验新系统可靠性,提前发现潜在问题
$X2v
kPM0
3)对比测试,同样请求,针对不同或不同版本程序,可以做性能对比等试验51Testing软件测试网/PoC@{q
4)应用热备份,对于后端的短连接,请求丢失率非常低(1/10万)51Testing软件测试网XI-g4kY!V7x$Zl$a*e
tcpcopy具有以下几个特点:
A+M%?i6KaE0
1)实时转发51Testing软件测试网]/W1H
iiC3}
2)近乎真实效果51Testing软件测试网
PPZqPn1m
3)对在线系统影响很小
~)K[TJ~6x6\y]G0
4)操作简单51Testing软件测试网"[E7ls)CT/MM8b
5)分布式51Testing软件测试网c"Y _
o*kI'}.g9|7h"g
6)意义非凡
7C4o6t/B5L+AImf0
使用tcpcopy非常简单,下载源码,编译,按照说明,几个步骤很快就能使用。
` V{n,rnoa0
关于tcpcopy使用的一些注意事项有:
ILHJIzY,t0
1)Linux平台,内核2.6+
#Iv1^XY5aT7k|6X^0
2)TCPCOPY类似于UDP,所以会丢包,进而丢失请求51Testing软件测试网,M J#j5]G7e4^#ql
3)本系统不支持域名,只支持ip地址
*cu1m&e4UT-y-G#AM0
4)Local Requests,请设置lo MTU不超过1500,并且在配置文件中不要设置127.0.0.1地址,51Testing软件测试网2}8m;N,}&e5sq2r
要设置内网或者外网地址51Testing软件测试网n&wF!g8m+\
5)TCPCOPY server有可能会成为性能瓶颈
2Oc9}xw0
6)丢失请求率跟网络状况有关,最好在内网内复制请求51Testing软件测试网\9`rkG6V
7)TCPCOPY中的tcpcopy和interception程序运行需要root权限51Testing软件测试网&Nh.t}t S:nrB)d6q
8)TCPCOPY只与ip、tcp层的数据有关,如果请求验证与tcp层以上的协议有关,则系统不能正常运行。
U"cVG(gsB o0
例如:mysql连接协议,由于权限认证与tcp层上面的mysql协议有关,所以复制过去的请求会被目
.yo {/Lj
tj P0
标测试服务器认为非法请求,这个时候需要针对mysql协议作具体针对性的处理,tcpcopy程序才能正常运行51Testing软件测试网)G@])U8sF7s#l
9)程序更新非常快,所以最新版本在svn上面51Testing软件测试网 J8FS/j q9Z0X r'~
svn checkout http://tcpcopy.googlecode.com/svn/trunk/ tcpcopy51Testing软件测试网;iI'oy@#w7qG
10)目前追求的是功能,性能优化和代码重构会在稳定以后进行
V$X8k$[U
o0
11)长response目前支持不是很好,将在下一个版本改进
)A
_&?:L9M$Z5DP0
12)如果有问题,请注意error.log文件提示的错误信息 (email: 163.beijing@gmail.com)51Testing软件测试网#p/O2q-pB]H7Y&UP
13)源代码已经转到github51Testing软件测试网 v'e
O
s1Y,X
除了这些,下面是我在用tcpcopy测试mysql时的一些小结:
H*B+D2O6U(T0
1) 测试MySQL时,测试机需要开启 skip-grant-tables,否则无法正常进行,因为MySQL需要进行认证;在线服务器无需调整51Testing软件测试网|Sha1]G^
2) 测试过程中不能执行flush privileges,否则上述选项会失效
W~~tkN&qZ`1E2I0
3) 每次启用tcpcopy时,都需要重启mysqld,不能在线直接应用,否则不能转发包(最新版本已经解决这个问题)
#[T4}#a rN${0
4) 用sysbench进行测试过程中,prepare时,在线服务器能创建测试表,测试机无法创建新表51Testing软件测试网c3f%M AY0]cE[J
5) 需适当调大内核参数:ip_queue_maxlen,否则会出现大量的queue dropped51Testing软件测试网Yb5Kw6V|-?
6) 无法完全保证在线服务器和测试机的数据一致性,只能做为模拟线上压力,提前进行bug测试等用途51Testing软件测试网-Fa%],@#Q/b