今天由于某些原因,DSP系统的测试环境不能用了,所以想复制一些正式环境的流量到测试服务器上。查找资料,发现了个 tcpcopy 项目,发现不错。

Github上虽然也有安装和使用手册,但对于第一次环境的人来说,还是有点模糊。经过自己动手设置,终于理解了它的使用方式:

安装就不多介绍了,这里只是描述使用

假设你的测试环境的应用监听的是 9001 ,而且是在 10.0.0.40

启动 intercept

假设 intercept 的IP为 10.0.0.40 ( intercept 要与你的测试的应用程序所在的服务器在同一个),而且下面的 9001 也就是测试的应用程序的端口。

./intercept -i eth0 -F 'tcp and src port 9001' -d

注意,这里的 9001 就是要处理的当前服务器地址的源端口

启动 tcpcopy

假设 tcpcopy 的地址为 10.0.0.40

./tcpcopy -x 80-10.0.0.40:9001 -s 10.0.0.40 -c 10.0.0.40

-x :表示将本机的 80 端口的流量,copy一份到 10.0.0.409001 端口。最好加上 -H 来指定本机绑定的IP地址. -s :这个就是 intercept 的地址。完整的格式为 “ip:port,ip2:port” -c :tcpcopy 修改tcp的源IP地址,以免响应给最初的 client。

提醒: 习惯用 -H 你本机的的IP 参数比较好, 不然可能会出现没回放的情况.

完整的示例格式

sudo ./tcpcopy -H 10.26.83.156  -x 888-10.26.83.156:8000 -s 10.26.83.156 -c 10.26.83.x -r 1 -l tcpcopy.log

注意

下面是要注意的事项

丢包

在测试过程中,发现它会丢包,测试的情况如下:

9477 - 10000
18959 - 20000
28351 - 30000

上面是 成功数/总请求数

负载

10GB内存,8核的 ab 10W个请求:

tcpcopy: 0.4% 的内存,53% 的CPU intercept: 0.4% 的内存, 23% 的CPU