码农博客 即将到期,现将博客中部分文章转载到博客园。本文发表与2012年,基于tcpcopy 0.6版本。转载时略有删减。

Tcpcopy简介

TCPCopy是一种请求复制(所有基于tcp的packets)工具 ,其功能是复制在线数据包,修改TCP/IP头部信息,发送给测试服务器,达到欺骗测试服务器的TCP 程序的目的,从而为欺骗上层应用打下坚实基础。

TCPCopy七大功能

  • 1)分布式压力测试工具,利用在线数据,可以测试系统能够承受的压力大小(远比ab压力测试工具真实地多),也可以提前发现一些bug
  • 2)普通上线测试,可以发现新系统是否稳定,提前发现上线过程中会出现的诸多问题,让开发者有信心上线
  • 3)对比试验,同样请求,针对不同或不同版本程序,可以做性能对比等试验
  • 4)流量放大功能,可以利用多种手段构造无限在线压力,满足中小网站压力测试要求
  • 5)利用TCPCopy转发传统压力测试工具发出的请求,可以增加网络延迟,使其压力测试更加真实
  • 6)热备份
  • 7)实战演习(架构师必备)

TCPCopy分为TCPCopy client和TCPCopy server

其中TCPCopy client运行在在线服务器上面,用来捕获在线请求数据包;TCPCopy server(监听端口为36524)运行在测试机器上面,在测试服务器的响应包丢弃之前截获测试服务器的响应包,并通过TCPCopy client和TCPCopy server之间的tcp连接传递响应包的tcp和ip
头部信息给TCPCopy client,以完成TCP交互。

启动tcpcopy

TCPCopy server (root用户执行)
1)启动内核模块ip_queue

#modprobe ip_queue

2)设置要截获的端口,并且设置对output截获

#iptables -I OUTPUT -p tcp --sport <port> -j QUEUE 

3)启动intercept

intercept

注意:
1.如果已经启动ip_queue和已经设置iptables,只需要运行第3项;

iptables --list

2.测试完以后要记得删除上面设置的iptables条目
清空iptables:

iptables -F

3.为了避免不必要的麻烦,关闭的时候先关闭tcpcopy,然后再关闭intercept
TCPCopy client (root用户执行)
tcpcopy 0.6版本
./tcpcopy -x 服务器应用端口号-测试服务器ip地址:测试服务器应用端口
-n 参数
进行多重复制,此参数的值就是代表复制过去的流量是在线的n 倍
其他参数请参看文档

Tcpcopy实战

我测试的项目是一个基于RFID的物联网采集项目,采集的主要功能是接收基站发过来的TCP数据对其进行解析,分发。当时选工具的时候也考虑了好几个,Jmeter好像没有这方面功能,而LoadRunner的windows sockets又相对复杂,所以选择了简单易用的tcpcopy。

测试环境

2台ubuntu/linux机器,一台作为在线服务器,用来接收真实的基站信息,一台用来做测试服务器,用来承受在线服务器流量翻倍后的压力。在线服务器使用4001端口,为了保持一致,测试服务器也使用该端口。
tcpcopy 0.6
nethogs 用来监控流量

tcpcopy安装:

tar -zxvf tcpcopy-0.6.0 .tar.gz
cd tcpcopy-0.6.0
./configure
make
make install

第一步:设置静态IP

设置静态IP是为了以后测试方便,可以略过
/etc/netword/interfaces中加入

auto eth0 #网卡
iface eth0 inet static
address 192.168.0.94 #IP地址
gateway 192.168.0.254 #网关
netmask 255.255.255.0 #子网掩码

/etc/NetworkManager/NetworkManager.conf 中设置

[ifupdown]
managed=true

第二步:启动在线服务器和测试服务器上的测试程序

第三步:启动测试服务器上的intercept

#modprobe ip_queue
#iptables -I OUTPUT -p tcp --sport <port> -j QUEUE
#intercept

第四步:启动在线服务器上的tcpcopy

#tcpcopy  -x <port>-192.168.0.96:<port> -n 100

第五步:通过nethogs查看压力是否上来

nethogs安装:

#apt-get install nethogs

nethogs使用:

#nethogs eth0

在线服务器上java程序流量:

测试服务区上java程序流量:

通过对比可以看出,tcpcopy产生的压力上来了。
相关下载:

Tcpcopy简介与实战的更多相关文章

  1. [转]Tcpcopy简介与实战

    Tcpcopy简介 TCPCopy是一种请求复制(所有基于tcp的packets)工具 ,其功能是复制在线数据包,修改TCP/IP头部信息,发送给测试服务器,达到欺骗测试服务器的TCP 程序的目的,从 ...

  2. LTTng 简介&使用实战

    一.LTTng简介 LTTng: (Linux Trace Toolkit Next Generation),它是用于跟踪 Linux 内核.应用程序以及库的系统软件包.LTTng 主要由内核模块和动 ...

  3. mfs分布式系统从理论简介到实战部署

    文章前面想说的话:这篇博客写出来真是有点累到了,本来昨天就基本就写好了,放在草稿里面,今天打开就没有了!!唉,就尼玛离我而去了,只有重写,然后中间虚拟机还“爆炸”重启又搞了一会,不容易呀!!希望各位博 ...

  4. tcpcopy简介

    本文内容是整理自 王斌的博客(http://blog.csdn.net/wangbin579)和郑钧的博客(http://www.cnblogs.com/zhengyun_ustc),以便让自己可以有 ...

  5. java微服务简介与实战

    今年做了一段时间的可见光.ceph存储,后端开发微服务项目,在这记录点东西,也方便大家借鉴查找. springboot的项目实例:https://github.com/ityouknow/spring ...

  6. Elasticsearch简介与实战

    什么是Elasticsearch?   Elasticsearch是一个开源的分布式.RESTful 风格的搜索和数据分析引擎,它的底层是开源库Apache Lucene.   Lucene 可以说是 ...

  7. Blazor Hybrid / MAUI 简介和实战

    1. Blazor Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 UI. 共享使用 .NET 编写的服务 ...

  8. iframe跨域通信实战

    "长时间不写文章,开头的方式总是那么出奇的相似",最近很忙,好久没写博客了啊(是不是?). 更换工作已经有三个月有余,这段三个月把过去三年没加过的班都加了一次.收获挺多,发现的问题 ...

  9. Python--Redis实战:第四章:数据安全与性能保障:第7节:非事务型流水线

    之前章节首次介绍multi和exec的时候讨论过它们的”事务“性质:被multi和exec包裹的命令在执行时不会被其他客户端打扰.而使用事务的其中一个好处就是底层的客户端会通过使用流水线来提高事务执行 ...

随机推荐

  1. Oracle 体系结构2 - 共享和专用服务器

    1. 怎么查看自己的oracle是共享还是专用服务器 2. 怎么修改设置 3.各有什么优缺点 4.适用环境 对于专用服务器,每一个数据库连接,oracle都会分配一个专门的进程为其服务 oracle@ ...

  2. MyBatis,动态传入表名,字段名的解决办法

    转载:http://luoyu-ds.iteye.com/blog/1517607 今天做项目,遇到的问题就是需求修改数据表的记录,而且字段名都不是固定的,也就是说是需要通过参数传入的, 本来这也不是 ...

  3. for each

    public class ArrayForeach{ public static void main(String []args){ int [][]a={{1,2,3},{4,5,6},{7,8,9 ...

  4. 常用的Linux终端

    常用的Linux终端 gnome-terminal (Gnome标配) xfce4-terminal (XFCE4标配) lxterminal (LXDE标配) konsole (KDE标配) 前面3 ...

  5. MyEclipse +Servlet 乱码

    用MyEclipse 新建了Web Project,然后建立了一个Servlet,在doGet方法中谢了简单的一句欢迎语句,本来以为平平常常的事情,但是却出错了,乱码问题,在网上找了一些帖子,说是设置 ...

  6. 怎么在eclipse里调试WebDriver的源代码

    当你看完WebDriver的工作原理这篇博客以后,是不是也跃跃欲试想印证文章里的理论是不是正确,想自己也看下webdriver的源代码,并且调试下,通过代码来更深入的了解WebDriver的工作原理. ...

  7. java开发之关键字

    abstract //抽象方法,抽象类的修饰符assert //断言条件是否满足boolean //布尔数据类型break //跳出循环或者label代码段byte //8-bit 有符号数据类型ca ...

  8. 发布 windows 10 universal app 时微软账号验证失败

    具体错误:Visual Studio encountered an unexpected network error and can't contact the Microsoft account s ...

  9. UVa 11330 (置换 循环的分解) Andy's Shoes

    和UVa11077的分析很类似. 我们固定左脚的鞋子不动,然后将右脚的鞋子看做一个置换分解. 对于一个长度为l的循环节,要交换到正确位置至少要交换l-1次. #include <cstdio&g ...

  10. HNOI2004宠物收养所(平衡树)

    treap! var i,n,x,y,ans,a,b,root,tot,ft:longint; l,r,s,v,hr:..] of longint; procedure r_rotate(var x: ...