压测工具:
工具 | 说明 | 使用 | 特点 |
---|---|---|---|
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/sec、msecs/connect 这个选项,即服务器每秒能够响应的查询次数 |
webbench | webbench是Linux下的一个网站压力测试工具,最多可以模拟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、实时拷贝
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 |
---|