压测工具

压测工具:

工具 说明 使用 特点
ab

模拟多个访问者同时对某一URL地址进行访问(nginx,tomcat,lighhttp)模拟多线程并发请求

ab -c 100 -n 1000 http://www.baidu.com/

做重复压力测试不错,但是每次只能测试一个链接

http_load

http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载,他可以以一个单一的进程运行,一般不会把客户机搞死,还可以测试https类的网站请求,程序非常小,不到100k

http_load -p 30(进程数) -s 60(总计的访问时间)  urllist.txt

测试结果中主要的指标是 fetches/secmsecs/connect 这个选项,即服务器每秒能够响应的查询次数

webbench

webbenchLinux下的一个网站压力测试工具,最多可以模拟3万个并发连接去测试网站的负载能力

程序比较小,不到50k

webbench -c 并发数 -t 运行测试时间 URL

最多可以模拟3万,限制太大

Siege

一款开源的压力测试工具,可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行

siege -c 200 -r 10 -f example.url

预置列表中请求随机的URL,siege可用于仿真用户请求负载

说明:1、以上的压测只能模拟流量压测,无法做到真实的流量压测

           2、不能实时模拟线上环境

线上引流方式的压测:

引流方式 实现方式 优点 缺点
nginx层的流量复制 通过lua脚本把请求复制给测试环境 安装部署简单 需要开发lua脚本,对资源有一定占用
基于业务代码层的引流

将业务代码的调用封装层请求对象,异步的写入缓存中,引流工具通过读取缓存

中的请求对象,想压测环境发起请求

扩展性好 需要开发流量复制工具,工作量不小
基于日志访问日志回放 线上系统记录访问日志,引流工具通过解析日志,向测试环境发起请求 离线方式对线上影响小 需要开发日志解析工具,切解析开销比较大
基于TCP/IP层的引流 目前已经开源工具tcpcopy 安装部署简单 有丢包率,只支持IP,针对长连接(上传文件),不是很支持

 

一、简介:

Tcpcopy是一个分布式在线压测工具,可以将线上流量拷贝到测试机器,实时模拟线上环境

Tcpcopy是由网易技术部2011年9月开源的一个项目

二、结构图:

 

三、工作流程:

1、一个访问到达线上前端机器

2、socket数据包在IP层被拷贝了一份给tcpcopy进程

3、tcpcopy修改包的目的及源地址,发给测试机

4、拷贝包到达测试机

5、目标测试机的nginx处理访问,并返回结果

6、返回结果在IP层被截获、丢弃,由intercept进程拷贝结果的ip header并返回

7、ip header被返回给前端机的tcpcopy进程(由于去除了body层,只有header数据,对负载压力小)

四、两种工作模式:

1、实时拷贝数据包

2、通过使用tcpdump等抓包生成的文件进行离线(offline)请求重放

五、两种模式的实现:

1、实时拷贝

./tcpcopy -x 80-172.16.***.52:80 -s 172.16.***.53 -d       #全流量复制
./tcpcopy -x 80-172.16.***.52:80 -s 172.16.***.53 -r 20 -d  #复制20%的流量
./tcpcopy -x 80-172.16.***.52:80 -s 172.16.***.53 -n 2 -d    #放大2倍流量
2、使用tcpdump录制pcap离线文件
 

tcpdump -i eth0 -w online.pcap tcp and port 80 

-i eth0:eth0为网卡,获取方式可在liunx系统下执行ifconfig查看所有的网卡,选取需要的那个。 -w online.pcap:为获取pcap文件进行回放,可设置路径,e.g. -w /home/user/test.pcap tcp and port 80:截获端口为80的tcp请求,也可添加udp请求,和更改服务端口80,e.g. tcp and port 16001
-s 0:默认的话,tcpdump只显示部分数据包,-s snaplen是控制包长度的,默认是68字节,-s 0 则为全部字节,在使用过程中,如果添加-s则回放时会出现错误。可不使用该参数

回放:

1 whereis tcpcopy,可在/usr/local/tcpcopy/sbin下发现tcpcopy命令 2 ./tcpcopy -x 16001-服务器ip:16001  -s 服务器ip -i /home/user/test.pcap 3 服务端抓包测试:tcpdump -n port 16001
 

猜你喜欢

转载自jy-damon.iteye.com/blog/2355846