# webbench-annotated **Repository Path**: louxj/webbench-annotated ## Basic Information - **Project Name**: webbench-annotated - **Description**: webbench-1.5 源码注释版 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-09-20 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # WebBench ## 一、简介 > Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。[官方源码下载链接](http://home.tiscali.cz/~cz210552/webbench.html)下面的截图展示的是webbench的官方网站,可以看到,最近一次维护已经是在2004年了。 ![mark](images/WebSiteForWebBench.png) ## 二、实现原理 WebBench-1.5的源码只有2个: - `socket.c`, - `webbench.c` 通过阅读源码,我们总结出WebBench主要工作原理如下: 1. 主函数进行必要的准备工作,进入bench开始压测; 2. bench函数使用fork模拟出多个客户端,调用socket并发请求,每个子进程记录自己的访问数据,并写入管道; 3. 父进程从管道读取子进程的输出信息; 4. 使用alarm函数进行时间控制,到时间后会产生SIGALRM信号,调用信号处理函数使子进程停止; 5. 最后只留下父进程将所有子进程的输出数据汇总计算,输出到屏幕上; ![](images/FlowChart.png) 梳理:函数调用关系 main -> build_request -> main -> bench -> benchcore -> main unction-call ## 三、并发压力测试 > Webbench是知名的网站压力测试工具,它是由Lionbridge公司(http://www.lionbridge.com)开发。webbench的标准测试可以向我们展示服务器的两项内容:每秒钟响应请求数和每秒钟传输数据量。webbench不但能具有便准静态页面的测试能力,还能对动态页面(ASP,PHP,JAVA,CGI)进行测试的能力。Webbench最多可以模拟3万个并发连接去测试网站的负载能力。 官方主页:http://home.tiscali.cz/~cz210552/webbench.html ### 3.1 安装WebBench ``` $wget http://www.ha97.com/code/webbench-1.5.tar.gz(也可以离线下载并安装) $tar zxvf webbench-1.5.tar.gz $cd webbench-1.5 $make && make install ``` ### 3.2 搭建webserver测试环境 下面开始安装Apache 的HTTP服务器(官网地址:http://httpd.apache.org/): 将http_install.tar.gz包拷贝到srv上,比如/home下,然后解压 ```bash $ tar -xvf http_install.tar.gz ``` 解压后,进入目录执行脚本: ```bash $ sh install_httpd.sh ``` 查询版本号: ```bash $ rpm -qi httpd ``` 如果发生错误,需要卸载的话,可按照如下方式执行: 首先关闭httpd服务 ```bash $ /etc/init.d/httpd stop ``` 或者: ```bash $ service httpd stop ``` 列出httpd相关的程序包: ```bash $rpm -qa|grep httpd ``` 删除程序包: ``` rpm -e httpd-tools-2.2.15-47.e16.centos.3.x86_64 rmp -e httpd-2.2.15-47.e16.centos.3.x86_64 ``` 如果发生依赖错误,则需要先将依赖删除,再删除上述文件即可。 查看配置文件 ```bash $ cd /etc/httpd/conf $ vim httpd.conf ``` 主要配置项: | 序号 | 属性项 | 值 | | ---- | --------------------------- | -------------------------- | | 1 | ServerRoot | “/etc/httpd” 默认(httpd安装目录) | | 2 | Listen 80 | 80为端口,根据实际调整如:Listen 8090 | | 3 | DocumentRoot“/var/www/html” | 存放文档的路径 | 设置多个监听端口: ``` Listen 80 Listen 90 Listen 8001 ``` 日志文件: ```bash /etc/httpd/logs ``` 启动服务: ```bash service httpd start ``` 查看服务状态: ```bash service httpd status ``` ### 3.3 客户端并发连接测试 使用webbench进行并发的压力测试: ```bash ./webbench -c 50 -t 30 http://10.221.148.159:8001/c.txt ``` 参数说明: - -c表示并发数, - -t表示时间(秒) > 备注:webbench最多可以模拟3万个并发连接去测试网站的负载能力 在srv端创建一个100M的空文件 ``` dd if=/dev/zero of=hello.txt bs=100M count=1 ``` 然后从客户端使用webbench进行压力并发的测试: 命令: ```bash ./webbench -c 50 -t 30 http://10.221.148.159:8001/c.txt ``` 压力可以根据测试场景逐渐增大