使用tcpcopy&tcpdump对商户应用进行模拟数据压测
今天在启文的帮助下一起对新框架下的shop-web一台机器进行了性能和容量压测。
过程中遇到了一些问题,以及也有一些操作失误,总结了一下与大家分享一下。
环境说明:
centos 6.0 x64
tcpcopy 0.8.0
具体操作过程如下:
1.在shop-web03.nh上在root账户下使用tcpdump命令 录制线上机器eth0的80端口请求流量。
tcpdump -i eth0 tcp and port 80 -s 0 -w shopweb03.pcap
PS:tcpdump常用参数:
(1). tcpdump的选项
-a 将网络地址和广播地址转变成名字;
-d 将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd 将匹配信息包的代码以c语言程序段的格式给出;
-ddd 将匹配信息包的代码以十进制的形式给出;
-e 在输出行打印出数据链路层的头部信息;
-f 将外部的Internet地址以数字的形式打印出来;
-l 使标准输出变为缓冲行形式;
-n 不把网络地址转换成名字;
-t 在输出的每一行不打印时间戳;
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv 输出详细的报文信息;
-c 在收到指定的包的数目后,tcpdump就会停止;
-F 从指定的文件中读取表达式,忽略其它的表达式;
-i 指定监听的网络接口;
-r 从指定的文件中读取包(这些包一般通过-w选项产生);
-w 直接将包写入文件中,并不分析和打印出来;
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;)
2.shop-web18.nh上:
(1) 安装tcpcopy,启用离线模式
yum install libpcap-devel
cd /data
git clone http://github.com/wangbin579/tcpcopy
cd tcpcopy
sh autogen.sh
./configure --prefix=/usr/local/tcpcopy --enable-offline
make
make install
(2)修改nginx配置文件,过滤POST请求,避免脏数据
在nginx的配置文件中加上:
if ($request_method !~ ^(GET|HEAD)$ ) {
return 403;
}
或者:
if ($request_method = POST){
return 403;
}
或
if ($request_method ~ ^POST$ ) {
return 403;
}
三选一即可。
(3)在shop-web18.nh上开测,root账户下:
由于我们用的是2.6.32内核,低于3.5的内核,需要执行:
接收数据端内核参数,
启动内核模块ip_queue:
modprobe ip_queue
然后执行:设置要截获的端口,并且设置对output截获
iptables -t filter -I OUTPUT -p tcp --sport 80 -j QUEUE
/usr/local/tcpcopy/bin/intercept &
正常流量:/usr/local/tcpcopy/bin/tcpcopy -i shopweb03.pcap -x 80-10.1.4.112:80
3倍流量: /usr/local/tcpcopy/bin/tcpcopy -i shopweb03.pcap -x 80-10.1.4.112:80 -n 3
5倍流量: /usr/local/tcpcopy/bin/tcpcopy -i shopweb03.pcap -x 80-10.1.4.112:80 -n 5
开启nginx,查看nginx访问日志:
/etc/init.d/nginx restart
cd /data/applogs/nginx && tail -f shop-web.access.log
同时观察cat上的数据,nginx上的监控数据。
tcpcopy常用参数:
发送数据端: tcpcopy 本地ip地址1[:本地ip地址2:…] 本地port 远程ip地址 远程port
接收数据端:/usr/local/tcpcopy/bin/intercept
详情见:https://github.com/wangbin579/tcpcopy