[XCopy]tcpcopy0.6版本的使用方法

无意间看见网易使用TCPCOPY来测试分布式负载性能测试,并且给出ab测试的结果虚高,是TCPCOPY测试结果的5倍。so,简单试用一下,把结果发下来供大家参考。 

1.下载tcpcopy,地址为http://code.google.com/p/tcpcopy/如果在该地址下载则,直接可以编译安装执行,要求操作系统为linux,如果从github中clone过来:地址为:  git clone http://github.com/wangbin579/tcpcopy,则需要先运行

 git clone http://github.com/wangbin579/tcpcopy
 sh autogen.sh
 ./configure
 make
 make install (需要root权限)

2.安装tcpcopy需要root权限,直接clone的,可以从./configure处开始就可以了。 
复制流量的原理: 

① 一个访问到达线上前端机;

② socket包在ip层被拷贝了一份传给tcpcopy进程;

③ tcpcopy修改包的目的及源地址,发给测试前端机;

④ 拷贝的包到达测试前端机;

⑤ 测试前端机的nginx处理访问,并返回结果;

⑥ 返回结果在ip层被截获、丢弃,由intercpetion拷贝返回结果的ip header返回;

⑦ ip header被发送给线上前端机的tcpcopy进程。

3.介绍如何使用 

TCPCOPY分为2个部分client以及server,将client放到需要转移流量的服务器上,server放在测试机器上,例如如下的配置:

client 机器上:
sudo tcpcopy -x 8401-10.18.105.110:36524 -l tcpsend.log
server 机器上:
sudo modprobe ip_queue
sudo iptables -I OUTPUT -p tcp --sport 36524 -j QUEUE
sudo intercept -l tcpreceive.log

代表的意思为: 
转移141:8401端口的访问流量到110机器的36524端口 
而server端需要指定接收那台机器上来的信息,自己开放那个端口 -l 代表日志放在哪里 

4.日志的例子 
我截取了一部分日志(这部分是未成功的日志) 

[notice] Mon Sep 24 17:40:30 2012 usec=780462 intercept version:0.6.0
[notice] Mon Sep 24 17:40:30 2012 usec=784913 create delay-table,size:65536
[notice] Mon Sep 24 17:40:30 2012 usec=794283 create router-table, size:131072
[notice] Mon Sep 24 17:40:30 2012 usec=794347 socket created successfully
[notice] Mon Sep 24 17:40:30 2012 usec=794360 it binds address successfully
[notice] Mon Sep 24 17:40:30 2012 usec=794372 it listens successfully
[notice] Mon Sep 24 17:40:30 2012 usec=794374 msg listen socket:4
[notice] Mon Sep 24 17:40:30 2012 usec=794412 sendto for ip queue is ok
[notice] Mon Sep 24 17:40:30 2012 usec=794415 firewall socket:5
[warn] Mon Sep 24 17:40:30 2012 usec=794425 nl recv error:60
[warn] Mon Sep 24 17:40:30 2012 usec=794427 privilage problems or not the obj of tcpcopy
[error] Mon Sep 24 17:41:39 2012 usec=638820 set signal handler:2
[notice] Mon Sep 24 17:41:39 2012 usec=638892 release_resources begin
[notice] Mon Sep 24 17:41:39 2012 usec=638920 firewall sock is closed
[notice] Mon Sep 24 17:41:39 2012 usec=638940 msg listen sock is closed
[notice] Mon Sep 24 17:41:39 2012 usec=638946 destroy router table
[notice] Mon Sep 24 17:41:39 2012 usec=643316 total visit hash_find_node:0,compared:0
[notice] Mon Sep 24 17:41:39 2012 usec=643346 destroy items 0 in table name:router-table
[notice] Mon Sep 24 17:41:39 2012 usec=643349 destroy delay table,total:0
[notice] Mon Sep 24 17:41:39 2012 usec=644532 destroy items:0,free:0,total:0
[notice] Mon Sep 24 17:41:39 2012 usec=644539 create msg list:0,free:0,destr:0
[notice] Mon Sep 24 17:41:39 2012 usec=646470 total visit hash_find_node:0,compared:0
[notice] Mon Sep 24 17:41:39 2012 usec=646492 destroy items 0 in table name:delay-table
[notice] Mon Sep 24 17:41:39 2012 usec=646495 release_resources end except log file

5.tcpcopy可以加入参数-m 指定最大使用内存 -l 指定log存放位置 -n 指定复制多少倍的流量 

6.现遗留问题,发现截取一段时间后,自己tcpcopy自动挂掉,正在研究中…… 

7.发现问题在不同网段之间的clientserver会出现如下问题:

2012/09/24 18:32:37 +164 [error] Can not connect to remote server(48:36524) (Connection timed out)

此处问题的解决方案:使用代理进行转发一下 

8.模拟请求的脚本

#!/bin/sh
i=0
while true
do
        if [ $i -ne 100000 ]; then
                curl "http://10.18.102.141:8401/login" > /dev/null
                sleep 1
                $i=$i+1
        else
                break
        fi
done
时间: 2024-08-02 21:34:26

[XCopy]tcpcopy0.6版本的使用方法的相关文章

Python2.x版本中maketrans()方法的使用介绍

  这篇文章主要介绍了Python2.x版本中maketrans()方法的使用介绍,是Python学习中的基础知识,需要的朋友可以参考下 maketrans()方法返回的字符串intab每个字符映射到字符的字符串outtab相同位置的转换表.然后这个表被传递到translate()函数. 注意:两个intab和outtab必须具有相同的长度. 语法 以下是maketrans()方法的语法: ? 1 str.maketrans(intab, outtab]); 参数 intab -- 这是实际字符

Python2.x版本中cmp()方法的使用教程

  这篇文章主要介绍了Python2.x版本中cmp()方法的使用教程,在Python3.x版本中该方法不再被内置,需要的朋友可以参考下 cmp()方法返回两个数的差的符号: -1 如果 x < y, 0 如果 x == y, 或者 1 如果 x > y . 语法 以下是cmp()方法的语法: ? 1 cmp( x, y ) 参数 x -- 这是一个数值表达式 y -- 这也是一个数值表达式 返回值 此方法如果x 例子 下面的例子显示cmp()方法的使用 ? 1 2 3 4 5 6 #!/us

SQL Server 2008及更高版本数据库恢复方法之日志尾部备份_mssql2008

        经常看到有人误删数据,或者误操作,特别是update和delete的时候没有加where,然后就喊爹喊娘了.人非圣贤孰能无过,做错可以理解,但不能纵容,这个以后再说,现在先来解决问题.         遇到这种情况,一般都是没有做备份,不然也不会来发问了.首先要冷静,否则会有更大的灾难.直到你放弃. 解决方法:        对于这类问题,主要是找回误操作之前的数据,在2008之前,有个很出名的工具Log Exploer,听说还挺好用的,这个网上大把教程,这里就不多说了.但是唯一

XP系统开机提示正常运行Windows所需的文件已被替换成无法识别的版本的解决方法

解决方法: 1.插入系统安装光盘,并运行sfc /scannow命令检测并修复可能受损坏和更改的系统文件. 2.在"开始→运行"对话框中键入"gpedit.msc",打开"本地计算机策略→计算机配置→管理模板→系统"窗口,找到"Windows文件保护",在右侧窗格中双击"设置Windows文件保护扫描"项,修改为"已禁用". 3.打开"注册表编辑器",找到[HKEY_

查看Linux系统版本信息的方法小结

  如何查看Linux系统使用的版本信息呢? 下面这篇文章收集.整理了一些常见的查看Linux系统版本的方法.由于手头只有Oracle Linux.Centos Linux.Redhat Linux三个版本Linux,所以像Debian.Ubuntu之类的Linux系统,下面方法在这些版本都没测试过. 1:more /etc/issue 命令查看 1.1 Oracle Linux 代码如下: [root@DB-Server ~]# more /etc/issueOracle Linux Serv

在Linux系统中检查glibc版本信息的方法

  GNU C库(glibc)是标准C库的GNU实现.glibc是GNU工具链的关键组件,用于和二进制工具和编译器一起使用,为目标架构生成用户空间应用程序. 当从源码进行构建时,一些Linux程序可能需要链接到某个特定版本的glibc.在这种情况下,你可能想要检查已安装的glibc信息以查看是否满足依赖关系. 这里介绍几种简单的方法,方便你检查Linux上的glibc版本. 方法一 下面给出了命令行下检查GNU C库的简单命令. 代码如下: $ ldd --version 在本例中,glibc版

Windows Media Player版本错误问题解决方法

  当打开 Windows Media Player 时.桌面出现错误提示:文件 wmploc.dll 的版本号为 12.0.7600.16385, 期望值为 12.0.7600.16667.Windows Media Player 安装不正确, 必须重新安装,怎么办? 这表明 Windows Media Player 版本注册表值出错了,Windows Media Player 版本组件文件可能已损坏.我们可以尝试以下方法来解决问题: 修改版本注册表键值 在开始搜索框内键入 regedit.e

mysql 5.7以上版本安装配置方法图文教程(mysql 5.7.12\mysql 5.7.13\mysql 5.7.14)_Mysql

之前安装mysql 5.7.12时未做总结,换新电脑,补上安装记录,安装的时候,找了些网友的安装记录,发现好多坑 (一)mysql 5.7.13 安装配置方法 1.mysql-5.7.12-winx64.zip下载官方下载地址:http://dev.mysql.com/downloads/mysql/ 2.解压到C:\job\mysql-5.7.12-winx64 3.在C:\job\mysql-5.7.12-winx64下新建my.ini配置文件内容如下: ##################

ubuntu如何破解密码?各种Linux版本密码破解方法总结

ubuntu破解密码方法 开机按住任何键(shift)停住grub菜单,进入advanced option for ubuntu,出现的菜单中,光标移动至-(recovery mode)按E进入编辑,找到ro recovery nomodeset更改为rw single init=/bin/bash,最后CTRL X重启. 1.在不登录情况下,获得root权限 如果没有设置GRUB密码,那我们可以使用最简单的方法,首先启动电脑,等待GRUB菜单,如果GRUB菜单隐藏,可以按Esc调出,选择Ubu