利用tcpburn进行长连接压测、现网流量压测
- 安装tcpcopy(主要是使用其intercept)或者是intercept
配置
配置是成功的关键,注意所有用来部署intercept、tcpburn、目标服务都必须在同一个网段
。
0)目标服务:待测试的服务部署 这里假定端口是16001 ip:a.b.c.234
添加路由规则主要是将待测试服务的应答包正确的路由到intercept服务,由intercept服务转发到tcpburn,完整整个过程。add -net 62.135.0.0 netmask 255.255.0.0 gw a.b.c.123 ``` 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23注意这里的net 62.135.0.0 需要与intercept -F中配置的项对应(如果要配置的话)。
gw 这里填的是intercept 的ip。
如果想要删除路由规则用下面的将上面的add 换成del 即可其他的不变
```route del -net 62.135.0.0 netmask 255.255.0.0 gw a.b.c.123 ```
1)首先我们需要一台server a.b.c.123来部署intercept,启动端口默认是36524启动命令比简单:
```intercept -i eth1 -F "src port 16001 and net 62.135.250.0/24" -d```
注意这里的-F 中的条件是用来过滤目标服务器回报那些需要转发给tcpburn。
比如目标服务器待测试的端口是`16001`,那么`src port 16001 `就是从源端口是16001发出的数据包。
net 表示网段是`62.135.250.0/24`的,这里需要跟tcpburn中`-c`参数中指定的相匹配。
2)部署tcpburn:可以跟intercept部署在一台server上:a.b.c.123
启动命令:
```./tcpburn -x 16001-a.b.c.234:16001 -f 16001_online_test.cap -s a.b.c.123 -p 36524 -u 100 -c 62.135.250.x ```
`注意需要优先启动intercept,否则会链接失败`
这里需要注意的几个地方:
16001-a.b.c.234:16001 前面的16001是生成16001_online_test.cap 抓包使用的端口后面的ip端口是目标测试服务的ip和端口。
-s 指定intercept 的ip
-p指定intercept的端口
-u是模拟多少客户端
-c是客户端的网段,这里的网段必须与intercept中过滤条件、目标服务器上添加的net相对应。
由于tcpburn是基于流量回放的模式所以需要事前抓一个数据包 16001_online_test.cap是通过tcpdump抓包的数据,用来发送到目标测试服务的。
```tcpdump -s 0 port 16001 -i any -w 16001_online_test.cap -c 20000 ```
``` shell
./tcpburn -x historyServerPort-targetServerIP:targetServerPort -f <pcapfile,> -s <intercept address> -u <user num> -c <ip range,>如果是想测试支持长连接的,那么编译tcpburn时configure带上参数
--comet
,再也不用担心编写接入层服务时200万长连接由于机器限制端口范围(1024-65535)而各种nat、虚拟网卡、虚拟ip、服务启动多个端口、客户端起多个进程等等这些繁琐的事情了附录:
安装方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15sudo apt-get install libpcap libpcap-devel
cd `pwd`/tcpcopy-0.9.9
make clean
sh autogen.sh
./configure --enable-single --enable-pcap --enable-advanced
make
make install
cd `pwd`/tcpburn
make clean
./configure --single #支持--single模式
./configure --single --comet #支持comet 模式即长连接模式
make
make install
简单的自动配置脚本生成工具
1 | intercept server |