【源码剖析】Webbench —— 简洁而优美的压力测试工具

     新地址:https://github.com/AngryHacker/articles/blob/master/src/code_reading/webbench.md

      Webbench 是一个古老而著名的网站压力测试工具,简单而实用。如果你不清楚你的网站能承受多大的压力,或者你想分析对比两个网站的性能,webbench 再好用不过了。

     Gitbub 地址:点我

     

     安装:

     很简单,cd 进项目主页后进行 make install clean 就好了。

 

     用法:

     想要知道用法可以在安装后直接输入 webbench 或 webbench -h 或 webbench --help. 可以看到:

webbench [option]... URL
  -f|--force               Don't wait for reply from server.
  -r|--reload              Send reload request - Pragma: no-cache.
  -t|--time <sec>          Run benchmark for <sec> seconds. Default 30.
  -p|--proxy <server:port> Use proxy server for request.
  -c|--clients <n>         Run <n> HTTP clients at once. Default one.
  -9|--http09              Use HTTP/0.9 style requests.
  -1|--http10              Use HTTP/1.0 protocol.
  -2|--http11              Use HTTP/1.1 protocol.
  --get                    Use GET request method.
  --head                   Use HEAD request method.
  --options                Use OPTIONS request method.
  --trace                  Use TRACE request method.
  -?|-h|--help             This information.
  -V|--version             Display program version.

     说一下主要的几个选项: 指定 -f 时不等待服务器数据返回,  -t 为指定压力测试运行时间, -c 指定由多少个客户端发起测试请求。

 

     -9 -1 -2 分别为指定 HTTP/0.9 HTTP/1.0 HTTP/1.1。

 

     示例:

     访问 http://baidu.com/ , 一个客户端,持续 60 秒。

 

➜  webbench-1.5  webbench -t 60 http://www.baidu.com/
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://www.baidu.com/
1 client, running 60 sec.

Speed=36 pages/min, 54150 bytes/sec.
Requests: 36 susceed, 0 failed.

    (这校园网真是 ri le gou 了)

 

      访问 http://baidu.com/ , 10 个客户端,持续 60 秒,socket 提前关闭。

➜  webbench-1.5  webbench -f -c 10 -t 60 http://www.baidu.com/
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://www.baidu.com/
10 clients, running 60 sec, early socket close.

Speed=586 pages/min, 0 bytes/sec.
Requests: 586 susceed, 0 failed.

 

     代码分析:

 

     其实我把项目 clone 之后做的第一件事是把代码风格全部调整了....强迫症面对不一样的缩进和花括号都不能忍...

     项目源码都位于 socket.c 和 webbench.c 两个 c 文件里面。其他都是说明文档或用于编译。

     可能涉及知识点:命令行参数解析(getopt_long) 信号处理(sigaction) socket  管道读写。这些都可以通过 man 相关函数或者直接百度,不赘述了。

 

     主要函数:

 

     alarm_handler 信号处理函数,时钟结束时进行调用。

     usage 输出 webbench 命令用法

     main 提供程序入口...

     build_request 构造 HTTP 请求

     bench 派生子进程,父子进程管道通信最后输出计算结果。

     benchcore 每个子进程的实际发起请求函数。

 

      主要流程:

      说一下程序执行的主要流程:

      1. 解析命令行参数,根据命令行指定参数设定变量,可以认为是初始化配置。

      2.根据指定的配置构造 HTTP 请求报文格式。

      3.开始执行 bench 函数,先进行一次 socket 连接建立与断开,测试是否可以正常访问。

      4.建立管道,派生根据指定进程数派生子进程。

      5.每个子进程调用 benchcore 函数,先通过 sigaction 安装信号,用 alarm 设置闹钟函数,接着不断建立 socket 进行通信,与服务器交互数据,直到收到信号结束访问测试。子进程将访问测试结果写进管道。

      6.父进程读取管道数据,汇总子进程信息,收到所有子进程消息后,输出汇总信息,结束。

 

      流程图:

                                                     

 

     注释源码:

     socket.c:

 

/* $Id: socket.c 1.1 1995/01/01 07:11:14 cthuang Exp $
 *
 * This module has been modified by Radim Kolar for OS/2 emx
 */

/***********************************************************************
  module:     
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值