Linux中部署服务器Tinyhttpd并用Webbench测试抗压性能
来源: 陈凌潇/
中国工商银行软件开发中心
14958
7
2
2015-01-14

【背景知识】

     webbench是由Lionbridge公司开发的知名的网站压力测试工具。它能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。webbench的标准测试可以向我们展示服务器的两项内容:每秒钟相应请求数和每秒钟传输数据量。webbench不但能具有便准静态页面的测试能力,还能对动态页面(ASP,PHP,JAVA,CGI)进 行测试的能力。还有就是他支持对含有SSL的安全网站例如电子商务网站进行静态或动态的性能测试。Webbench最多可以模拟3万个并发连接去测试网站的负载能力。

     Tinyhttpd是超轻量型的http server。这里我将尝试部署一个服务器,并用Webbecn测试其性能。

 

【任务说明】

     打开网页http://blog.jobbole.com/79023/,看到第一和第二个项目(Webbecn和Tinyhttpd),需要做的是:

    (1)在自己的VMware虚拟机里centos中,下载Tinyhttpd源码,编译并安装这个超轻量型的http server;

    (2) 然后编译安装Webbench,去测试Tinyhttpd的性能;

    (3)记录过程,并汇报遇到的问题和解决问题的方法,还有测试结果。

 

【操作流程】

    首先需要配好环境。我用的是VMwareWorkstation8.0和CentOS-6.5-x86_64。方便起见,虚拟机需要共享windows真机资源。

下面正式进入编译安装过程:

1:将本机中的Tinyhttpd源码拷到本地 /usr/local/src并解压。 tinyhttpd-0.1.0.tar.gz解压之后,发现tinyhttpd-0.1.0文件夹中有makefile文件,没有./configure文件,说明可以直接make编译。编译之前需要参照 httpd.c中注释行的要求对httpd.c和makefile文件进行修改。编译之后生成了可执行文件httpd。Httpd是可执行文件,不用再安装了,直接在/usr/local/src/tinyhttpd-0.1.0下执行./httpd 就运行起了一个websever。在浏览器中输入虚拟机IP即可进入web页面。

图1:服务器部署成功

2: 接下来编译安装Webbench。首先将webbench-1.5.tar.gz拷贝到/usr/local/src下并解压。直接make编译,此时如果报错“/bin/sh: ctags: command not found”则需要安装ctags,用语句” yum –y install ctags”。编译完成生成Webbench文件,安装“make install” ,如果报错“cannot create regular file `/usr/local/man/man1′: No such file ordirectory”,则需创建“/usr/local/man/man1”文件。Make install安装成功则:

图2:webbench安装成功

    3:现在开始用用Webbench测试Tinyhttpd的性能。

       webbench -c 500 -t 30 http://192.168.195.128:80/。(这个过程中可能出现很多问题,详情见【问题解答】)

 

【问题解答】

    1:使用 “yum grouplist” 指令查看已安装组时报告如下错误 “Error: Cannot find a valid baseurl for repo: base”。

       解决办法:echo "nameserver 8.8.8.8">>/etc/resolv.conf。

    

    2:Ping 一个网址时报错“connect: network is unreachable”。

       解决办法:在/etc/sysconfig/ifcfg-eth0中写入如下语句(根据实际情况修改HWADDR,IPADDR):

       DEVICE=eth0
       HWADDR=00:0C:29:A7:5C:4E
       ONBOOT=yes
       TYPE=Ethernet
       NETMASK=255.255.255.0
       IPADDR=192.168.195.128
       USERCTL=no
       IPV6INIT=no
       PEERDNS=yes

       运行语句:sudo dhclient

 

    3:查看本机物理地址时报错“bash: ipconfig: command not found”

      (低级错误)linux中用ifconfig,windows中用ipconfig。


    4: 解压后的Tinyhttpd里没有configure文件,是不是就说明不用再编译了?可是直接make && make install又报错

        ”/usr/bin/ld: cannot find –lsocket”
        解决办法:一开始以为是缺少lib包等,就yum update再yum install libpcap*,但/lib下还是没有没有                           libsocket.a,libsocket.so,没能解决问题。后来发现httpd.c文件中的注释行说明的操作:* To compile for Linux:
        *  1) Comment out the #include line.
        *  2) Comment out the line that defines the variable newthread.
        *  3) Comment out the two lines that run pthread_create().
        *  4) Uncomment the line that runs accept_request().
        *  5) Remove -lsocket from the Makefile. 
        照做之后,直接make就通过并生成了可执行文件httpd。


     5: 由于未知原因,可能是手动修改了一些网络配置,虚拟机ping不通本机也连不上外网。
        解决方法:经过一番折腾无果,最后采取 “编辑—>虚拟网络编辑器—>恢复默认设置”。所以不得不承认,有时候简单粗暴比慢条斯理来得立竿见影。


     6:在用webbench对tinyhttpd进行测试时发现不是连不上就是卡死。

        解决办法:还没找到解决办法。
        一开始猜想原因应该是webbench和tinyhttpd在同一台机子上运行,会相互制约;或者是tinyhttpd太tiny,经不起webbench一测。于是用webbench测试了linux系统自带的httpd,没有问题。所以应该是tinyhttpd的问题。

图3:webbench测试系统自带httpd结果

        具体原因有待进一步探究。敬请期待下一篇动态!

        【原因补充】

        通过gdb调试在tinyhttpd的源码,最终将问题定位在httpd.c文件中第452行send(client,buf,strlen(buf),0)。

        因为webbench在一次访问完之后就断掉了,但是tinyhttp要分12次把一个网页的内容发送给webbench,所以第一次发的时候是成功的,第二次就失败了。而且,由于tinyhttpd太简单了,所以send的时候没有异常判断和处理,所以程序就死在那儿了。

        如何判断并处理异常,还需进一步研究学习服务器测试访问过程。这里为简单起见,仅通过将后面的11次内容发送注释掉了,然后就得到了正常的测试结果,如下图所示:



登录用户可以查看和发表评论, 请前往  登录 或  注册
SCHOLAT.com 学者网
免责声明 | 关于我们 | 联系我们
联系我们: