Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。
##使用:
sudo make && make install
##命令行选项:
短参 | 长参数 | 作用 |
---|---|---|
-f | --force | 不需要等待服务器响应 |
-r | --reload | 发送重新加载请求 |
-t | --time | 运行多长时间,单位:秒" |
|-p |--proxy <server:port> |使用代理服务器来发送请求 |
|-c |--clients |创建多少个客户端,默认1个" | |-9 |--http09 |使用 HTTP/0.9 | |-1 |--http10 |使用 HTTP/1.0 协议 | |-2 |--http11 |使用 HTTP/1.1 协议 | | |--get |使用 GET请求方法 | | |--head |使用 HEAD请求方 | | |--options |使用 OPTIONS请求方法 | | |--trace |使用 TRACE请求方法 | |-?/-h |--help |打印帮助信息 | |-V |--version |显示版本号 |
##基本原理:
1)运行参数获取和判断,默认1个客户端和运行60秒
2)构建请求
# HEAD/GET/OPTIONS/TREACE请求判断及版本判断
# url合法性判断
# 构建HTTP请求信息
3)打印版本信息及请求信息(url,方法,版本,客户端数量及运行时间)
4)执行压力测试
# 创建socket,判断与HTTP服务器是否可通,做可用性判断
# 创建PIPE通道,用于主进程和子进程的通信
# FOR子进程,数量与-C参数所指定的客户端数量一致
# 子进程处理逻辑
O 压力测试开始,用Alarm设置闹钟,回调处理是一个timerexpired值,该闹钟的作用是到达测试时间时改变timerexpired值,以使得后面的死循环测试可以跳出
O 不断地writeHTTP请求和read HTTP响应,并记录直到timerexpired置位跳出,记录成功次数、失败次数和接收到的字节数量。
O 如果置了-f参数,则不会等待响应结果就发起下一次HTTP请求
O 一个连接只会执行一个请求,收到请求后会关闭连接。
O 压力测试时间到了之后,会将结果输出到PIPE管道上,供主进程读取
# 主进程处理逻辑
O 通过PIPE读取子进程输出结果
O 当所有子进程(客户端)的结果都读取到之后汇总输出本次测试的结果,RPS
一句话总结:创建一堆的子进程去执行HTTP请求,每个进程执行完后将结果返回主进程,主进程等所有子进程结果后汇总打印。