这周在忙压力测试的事情,用到了TCPCopy,是一个挺不错的工具。
TCPCopy是一种请求复制(所有基于tcp的packets)工具,可以把在线流量导入到测试系统中去。它具有真实、实时、低负载、分布式等特点。
TCPCopy七大功能:
- 分布式压力测试工具,利用在线数据,可以测试系统能够承受的压力大小(远比ab压力测试工具真实地多),也可以提前发现一些bug
- 普通上线测试,可以发现新系统是否稳定,提前发现上线过程中会出现的诸多问题,让开发者有信心上线
- 对比试验,同样请求,针对不同或不同版本程序,可以做性能对比等试验
- 流量放大功能,可以利用多种手段构造无限在线压力,满足中小网站压力测试要求
- 利用TCPCopy转发传统压力测试工具发出的请求,可以增加网络延迟,使其压力测试更加真实
- 热备份
- 实战演习(架构师必备)
TCPCopy分为TCPCopy client(也即tcpcopy)和TCPCopy server(也即intercept)。其中TCPCopy client运行在在线服务器上面,用来捕获在线请求数据包;TCPCopy server(默认监听端口为36524)运行在测试机器上面,用来截获响应包,并传递响应包头信息给TCPCopy client,以完成TCP交互。
使用方法如下:
TCPCopy server
# modprobe ip_queue # 启动内核模块 ip_queue # iptables -I OUTPUT -p tcp --sport <port> -j QUEUE # 设置要截获的端口,并且设置对output截获 # ./intercept
注意:如果已经启动 ip_queue 和已经设置 iptables ,只需要运行第3项。测试完以后要记得删除上面设置的iptables条目。
TCPCopy client
# ./tcpcopy -x <online server app port>-<test server ip>:<test server app port>
假设1.2.3.25,1.2.3.26是在线应用服务器,1.2.3.161是测试服务器,在线应用端口是11311,测试服务器的应用端口都是11511,我们的目的就是为了确认1.2.3.161测试服务器能否承受目前两台在线的压力。
我们利用TCPCopy进行测试:
目标测试服务器(1.2.3.161)
# modprobe ip_queue # iptables -I OUTPUT -p tcp --sport 11511 -j QUEUE # ./intercept
在线服务器(1.2.3.25)
# ./tcpcopy -x 11311-1.2.3.161:11511
在线服务器(1.2.3.26)
# ./tcpcopy -x 11311-1.2.3.161:11511
1.2.3.25:
21158 appuser 15 0 271m 226m 756 S 24.2 0.9 16410:57 asyn_server 9168 root 15 0 18436 12m 380 S 8.9 0.1 40:59.15 tcpcopy
1.2.3.26:
16708 appuser 15 0 268m 225m 756 S 25.8 0.9 17066:19 asyn_server 11662 root 15 0 17048 10m 372 S 9.3 0.0 53:51.49 tcpcopy
1.2.3.161:
27954 root 15 0 284m 57m 828 S 58.6 1.4 409:18.94 asyn_server 1476 root 15 0 14784 11m 308 S 7.7 0.3 49:36.93 intercept
1.2.3.25:
$ wc -l access_1109_09.log 7867867, 2185 reqs/sec
1.2.3.26:
$ wc -l access_1109_09.log 7843259, 2178 reqs/sec
1.2.3.161:
$ wc -l access_1109_09.log 15705229, 4362 reqs/sec
请求丢失率为:(7867867 + 7843259 - 15705229) / (7867867 + 7843259) = 0.0375%
从上面可以看出1.2.3.161测试服务器能够承受目前在线压力的两倍。
我们来看负载情况:tcpcopy自身负载占到8.9%和9.3%,intercept占到7.7%,从负载来看,均不高,内存也占得不多。
注意事项:
-
Linux平台,内核2.6+,需要支持netlink机制或者nfqueue(0.6.5+支持nfqueue,在 ./configure 指定nfqueue即可)。
-
TCPCopy中的 tcpcopy 和 intercept 程序运行需要 root 权限。
-
intercept 在同一台机器只需要运行一个实例就能支持多个应用的复制(设置多条 iptables 命令)。
-
TCPCopy client需要连接测试服务器(默认36524端口),所以要对外开放相应端口。
-
TCPCopy由于依赖于抓包函数,压力大的时候,抓包函数本身不可靠,所以会丢包,进而丢失请求。
-
由于 intercept 程序密切跟 ip_queue 内核模块相关,所以当压力很大的时候请求丢失率很高,需要优化 sysctl 系统参数才能达到好的效果:
通过 cat /proc/net/ip_queue ,查看 ip_queue 运行情况,如果Queue dropped的数值不断增大,则需要修改 ip_queue_maxlen 参数,比如 echo 4096 > /proc/sys/net/ipv4/ip_queue_maxlen ;如果Netlink dropped的数值不断增大,修改 net.core.rmem_max 和 net.core.wmem_max 参数, 比如sysctl -w net.core.rmem_max=16777216 和 sysctl -w net.core.wmem_max=16777216 。
-
如果要复制127.0.0.1发出的请求到另外一台机器,需要设置 -c 参数。
-
测试环境最好和在线环境一致,比如连接都保持keepalive。
-
TCPCopy只与ip、tcp层的数据有关,如果请求验证与tcp层以上的协议有关,则系统不能正常运行。例如:mysql连接协议,由于权限认证与tcp层上面的mysql协议有关,所以复制过去的请求会被目标测试服务器认为非法请求,这个时候需要针对mysql协议作具体针对性的处理,tcpcopy程序才能正常运行。
-
多层架构环境下,测试系统一定要独立,与在线系统没有业务关联,否则会影响在线。
-
丢失请求率跟网络状况有关,最好在内网内复制请求。
-
本系统不支持域名,只支持ip地址。
-
为了避免不必要的麻烦,关闭的时候先关闭 tcpcopy ,然后再关闭 intercept 。
更多信息参考文档: https://github.com/downloads/wangbin579/tcpcopy/TCPCopy_0.6.5_Manual.pdf
相关推荐
在完成部署并运行tcpcopy和Intercept之后,可以通过监控网络流量、系统资源使用情况以及应用程序的日志来查看测试效果。此外,可以使用诸如tcpdump、Wireshark等网络分析工具来分析复制的流量。 ### 6. 常见错误 在...
TCPCopy的用法参考提供了详细的配置和运行指导,帮助用户快速上手。包括如何配置工具、运行步骤、客户端和服务端的具体操作等,这些内容对于进行性能压力测试、系统可用性测试、冒烟测试和回归测试都是必不可少的。 ...
遗憾的是,由于没有详细的使用文档和工作原理文档,对TCPGo的具体实现细节和使用方法只能进行推测。不过,对于熟悉C++和网络编程的开发者来说,这是一个挑战也是一个学习的好机会,通过对核心代码的研究,可以深入...
为了提高效率,可以使用异步方法处理TCP通信,如使用BeginSend和BeginReceive,这样在等待数据传输的同时,程序可以执行其他任务。另外,考虑到TCP的滑动窗口机制,可以根据网络状况动态调整发送窗口大小,优化带宽...
tcp 代理用法: $ make $ ./bin/tcp-proxy 例如:$ ./bin/tcp-proxy 本地主机:8080 本地主机:8000 一些实现提示: 默认启动nproc线程,每个线程运行独立的事件循环 (libev) 每个事件循环接受连接(使用 SO_REUSEPORT...
总的来说,使用TCP和SocketTcp编程在局域网中进行数据传输是一个涉及网络协议、数据流操作和异常处理等多个方面的综合任务。熟练掌握这一技术,对于开发网络应用、尤其是文件传输服务来说,是至关重要的。在实践中,...
Socket TCPSERVER是一种基于C#编程语言实现的TCP服务器,其核心特点是采用异步(非阻塞)方式处理客户端连接和数据传输。在C#中,Socket类是网络通信的基础,它提供了对TCP/IP协议的支持,允许应用程序进行双向通信...
使用tcpcopy对采集项目进行负载测试已经接近尾声了,由于下一个项目的采集程序只能在windows下运行,所以不得不寻找其他的测试工具。 使用tcpcopy对采集项目进行负载测试已经接近尾声了,由于下一个项目的采集程序...
500个示例总共15000行代码都是真正正在使用的代码,《TCP/IP详解卷2:实现》使用一种举例说明的方法来帮助你精通TCP/IP的实现。你会掌握以下问题:插口API和协议族之间的关系,一个主机实现和一个路由器实现之间的...
### 电脑CMD的常用用法 #### 一、CMD简介 CMD(命令提示符)是Microsoft Windows操作系统中的一个应用程序,用于执行各种命令行操作。...掌握这些命令的基本使用方法,对于任何级别的用户来说都是十分重要的。
### CISCO FTP使用方法概述 CISCO的IOS自版本12.0起便支持FTP服务,作为TCP/IP协议簇的一员,它为用户提供了一种比TFTP更为可靠的数据传输方式,因为FTP基于TCP协议,而TFTP则基于UDP协议。虽然UDP提供了更快速的...
书中给出了约500个图例,15 000行实际操作的C代码,采用举例教学的方法帮助你掌握TCP/IP实现。本书不仅说明了插口API和协议族的关系以及主机实现与路由器实现的差别。还介绍了4.4BSD-Lite版的新的特点,如多播、长肥...
书中给出了约500个图例,15000行实际操作的C代码,采用举例教学的方法帮助你掌握TCP/IP实现。本书不仅说明了插口API和协议族的关系以及主机实现与路由器实现的差别。还介绍了4.4BSD-Lite版的新的特点。本书适用于...
6.4.2 另一种方法 55 6.5 ICMP端口不可达差错 56 6.6 ICMP报文的4.4BSD处理 59 6.7 小结 60 第7章 Ping程序 61 7.1 引言 61 7.2 Ping程序 61 7.2.1 LAN输出 62 7.2.2 WAN输出 63 7.2.3 线路SLIP链接 64 7.2.4 拨号...
通过这些内容,读者可以更深入地理解并掌握DOS命令的操作方法。 #### 1. **Net Use 命令** - **语法**: ```plaintext net use [device] [\\computername\sharename [password | *]] ``` - **功能**: - 连接到...
本文档旨在提供一系列DOS(Disk Operating System)命令的详细介绍与使用方法,帮助用户高效地学习并掌握DOS的基本操作。以下是对文档中提到的部分命令进行的详细解读: #### 1. **Net Use** - **格式**: - `...
7. **网络编程**: 如何使用Socket进行客户端和服务器之间的通信,理解TCP和UDP协议的区别。 8. **设计模式**: 尽管对初学者来说可能较复杂,但高级阶段的学生可能会接触到一些常见的设计模式,如单例模式、工厂模式...
6.4.2 另一种方法 55 6.5 ICMP端口不可达差错 56 6.6 ICMP报文的4.4BSD处理 59 6.7 小结 60 第7章 Ping程序 61 7.1 引言 61 7.2 Ping程序 61 7.2.1 LAN输出 62 7.2.2 WAN输出 63 7.2.3 线路SLIP链接 64 7.2.4 拨号...