【背景知識(shí)】
webbench是由Lionbridge公司開發(fā)的知名的網(wǎng)站壓力測(cè)試工具。它能測(cè)試處在相同硬件上,不同服務(wù)的性能以及不同硬件上同一個(gè)服務(wù)的運(yùn)行狀況。webbench的標(biāo)準(zhǔn)測(cè)試可以向我們展示服務(wù)器的兩項(xiàng)內(nèi)容:每秒鐘相應(yīng)請(qǐng)求數(shù)和每秒鐘傳輸數(shù)據(jù)量。webbench不但能具有便準(zhǔn)靜態(tài)頁面的測(cè)試能力,還能對(duì)動(dòng)態(tài)頁面(ASP,PHP,JAVA,CGI)進(jìn) 行測(cè)試的能力。還有就是他支持對(duì)含有SSL的安全網(wǎng)站例如電子商務(wù)網(wǎng)站進(jìn)行靜態(tài)或動(dòng)態(tài)的性能測(cè)試。Webbench最多可以模擬3萬個(gè)并發(fā)連接去測(cè)試網(wǎng)站的負(fù)載能力。
Tinyhttpd是超輕量型的http server。這里我將嘗試部署一個(gè)服務(wù)器,并用Webbecn測(cè)試其性能。
【任務(wù)說明】
打開網(wǎng)頁http://blog.jobbole.com/79023/,看到第一和第二個(gè)項(xiàng)目(Webbecn和Tinyhttpd),需要做的是:
(1)在自己的VMware虛擬機(jī)里centos中,下載Tinyhttpd源碼,編譯并安裝這個(gè)超輕量型的http server;
(2) 然后編譯安裝Webbench,去測(cè)試Tinyhttpd的性能;
(3)記錄過程,并匯報(bào)遇到的問題和解決問題的方法,還有測(cè)試結(jié)果。
【操作流程】
首先需要配好環(huán)境。我用的是VMwareWorkstation8.0和CentOS-6.5-x86_64。方便起見,虛擬機(jī)需要共享windows真機(jī)資源。
下面正式進(jìn)入編譯安裝過程:
1:將本機(jī)中的Tinyhttpd源碼拷到本地 /usr/local/src并解壓。 tinyhttpd-0.1.0.tar.gz解壓之后,發(fā)現(xiàn)tinyhttpd-0.1.0文件夾中有makefile文件,沒有./configure文件,說明可以直接make編譯。編譯之前需要參照 httpd.c中注釋行的要求對(duì)httpd.c和makefile文件進(jìn)行修改。編譯之后生成了可執(zhí)行文件httpd。Httpd是可執(zhí)行文件,不用再安裝了,直接在/usr/local/src/tinyhttpd-0.1.0下執(zhí)行./httpd 就運(yùn)行起了一個(gè)websever。在瀏覽器中輸入虛擬機(jī)IP即可進(jìn)入web頁面。

圖1:服務(wù)器部署成功
2: 接下來編譯安裝Webbench。首先將webbench-1.5.tar.gz拷貝到/usr/local/src下并解壓。直接make編譯,此時(shí)如果報(bào)錯(cuò)“/bin/sh: ctags: command not found”則需要安裝ctags,用語句” yum –y install ctags”。編譯完成生成Webbench文件,安裝“make install” ,如果報(bào)錯(cuò)“cannot create regular file `/usr/local/man/man1′: No such file ordirectory”,則需創(chuàng)建“/usr/local/man/man1”文件。Make install安裝成功則:

圖2:webbench安裝成功
3:現(xiàn)在開始用用Webbench測(cè)試Tinyhttpd的性能。
webbench -c 500 -t 30 http://192.168.195.128:80/。(這個(gè)過程中可能出現(xiàn)很多問題,詳情見【問題解答】)
【問題解答】
1:使用 “yum grouplist” 指令查看已安裝組時(shí)報(bào)告如下錯(cuò)誤 “Error: Cannot find a valid baseurl for repo: base”。
解決辦法:echo "nameserver 8.8.8.8">>/etc/resolv.conf。
2:Ping 一個(gè)網(wǎng)址時(shí)報(bào)錯(cuò)“connect: network is unreachable”。
解決辦法:在/etc/sysconfig/ifcfg-eth0中寫入如下語句(根據(jù)實(shí)際情況修改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
運(yùn)行語句:sudo dhclient
3:查看本機(jī)物理地址時(shí)報(bào)錯(cuò)“bash: ipconfig: command not found”
(低級(jí)錯(cuò)誤)linux中用ifconfig,windows中用ipconfig。
4: 解壓后的Tinyhttpd里沒有configure文件,是不是就說明不用再編譯了?可是直接make && make install又報(bào)錯(cuò)
”/usr/bin/ld: cannot find –lsocket”
解決辦法:一開始以為是缺少lib包等,就yum update再yum install libpcap*,但/lib下還是沒有沒有 libsocket.a,libsocket.so,沒能解決問題。后來發(fā)現(xiàn)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就通過并生成了可執(zhí)行文件httpd。
5: 由于未知原因,可能是手動(dòng)修改了一些網(wǎng)絡(luò)配置,虛擬機(jī)ping不通本機(jī)也連不上外網(wǎng)。
解決方法:經(jīng)過一番折騰無果,最后采取 “編輯—>虛擬網(wǎng)絡(luò)編輯器—>恢復(fù)默認(rèn)設(shè)置”。所以不得不承認(rèn),有時(shí)候簡單粗暴比慢條斯理來得立竿見影。
6:在用webbench對(duì)tinyhttpd進(jìn)行測(cè)試時(shí)發(fā)現(xiàn)不是連不上就是卡死。
解決辦法:還沒找到解決辦法。
一開始猜想原因應(yīng)該是webbench和tinyhttpd在同一臺(tái)機(jī)子上運(yùn)行,會(huì)相互制約;或者是tinyhttpd太tiny,經(jīng)不起webbench一測(cè)。于是用webbench測(cè)試了linux系統(tǒng)自帶的httpd,沒有問題。所以應(yīng)該是tinyhttpd的問題。

圖3:webbench測(cè)試系統(tǒng)自帶httpd結(jié)果
具體原因有待進(jìn)一步探究。敬請(qǐng)期待下一篇?jiǎng)討B(tài)!
【原因補(bǔ)充】
通過gdb調(diào)試在tinyhttpd的源碼,最終將問題定位在httpd.c文件中第452行send(client,buf,strlen(buf),0)。

因?yàn)閣ebbench在一次訪問完之后就斷掉了,但是tinyhttp要分12次把一個(gè)網(wǎng)頁的內(nèi)容發(fā)送給webbench,所以第一次發(fā)的時(shí)候是成功的,第二次就失敗了。而且,由于tinyhttpd太簡單了,所以send的時(shí)候沒有異常判斷和處理,所以程序就死在那兒了。
如何判斷并處理異常,還需進(jìn)一步研究學(xué)習(xí)服務(wù)器測(cè)試訪問過程。這里為簡單起見,僅通過將后面的11次內(nèi)容發(fā)送注釋掉了,然后就得到了正常的測(cè)試結(jié)果,如下圖所示:

學(xué)者網(wǎng)

評(píng)論 3