2014年8月27日 星期三

用HTTPREF做網站壓力測試 將結果轉換為視覺圖表

用HTTPREF做網站壓力測試 將結果轉換為視覺圖表
測試網站伺服器抗壓性 掌握Web主機效能表現

一個網站管理員,日常的工作除了基本的維護服務正常運作外,另外一個重要的工作就是要保持順暢的服務,負責調校網站的效能,使其保持在最佳的狀態。網站伺服器如果使用的是Apache,將因為在開源碼社群中有許多可用的免費外掛模組,而可以外掛的方式來增加Apache伺服器的用途。但是,凡事有利就有弊,多增加一個模組,相對地就會多消耗資源來處理而影響服務的順暢度,此時就必須有一個適當的工具來客觀公正地測量效能表現。

本文將介紹一個在開源碼社群中相當有名的網站效能量測工具httpref,用來量測網站伺服器的效能,並利用autobench和gnuplot程式將量測的數據轉換成圖檔,以幫助管理者更直覺地解讀。

表1中列出了本次實作所使用到的各個軟體。


httpref說明與使用 

httpref是一種可對網站伺服器做壓力測試的工具,可在短時間內模擬大量的連線數對受測的網站伺服器從事壓力測試,藉以找出網站伺服器服務效能的臨界點。安裝httpref步驟很簡單(在此筆者使用0.9.0版本),下載解壓縮後,以下列指令編譯即可:



編譯成功後,httpref提供了兩個主要的執行檔,其中httpref為主要執行檔,可利用此程式針對受測的網站伺服器進行壓力測試,另一個名稱為idleconn的執行檔,則主要用來保持受測網站伺服器固定的連接數。

以下先行說明httpref主程式,httpref提供的相關參數如表2所示。

表2 httpref使用參數


httpref程式可以模擬產生要求(Request)的方式來製造大量的連線,以測試網站伺服器的效能,其執行指令內容如下所示:



上述指令表示針對該受測網站伺服器(通訊埠為80)上的index.php發送5,000個連線數(Connection)且每個連線數內含1個要求,即表示總共要用5,000個要求來測試,並且測試的速率為每秒鐘要產生200個連線數(即每秒產生200個要求),並且設定每個要求送至受測網站伺服器時,如果該受測網站伺服器處理此要求並沒有在5秒內回覆(逾時),即視為失敗而列入統計。

在執行成功之後,會產生如下的回覆報告,如圖1所示。


▲圖1 成功執行後產生回覆報告。

接著,說明httpref報告各部分的代表意義:

1. 測試的整體數據,包含所建立的TCP連線總數 目,所測試的HTTP要求(request)總數目,以及得到HTTP回覆(reply)的總數目,如下即表示總共在25秒內(test-duration)建立了5,000個連線(connection)及5,000個要求,並收到受測網站伺服器回覆(replies)5,000個要求。



2. 個別TCP的連接數據,包含每秒發送多少個連線 和幾個連線以下,會用同時發送的方式發送到受測的網站伺服器上,以下就是表示每秒鐘產生199個連線數,而且最多會同時送出17個連線數至受測的網站伺服器上。



3. 每個連線所使用的存活週期(指的是從初始化產 生至整個連線數結束為止,單位為毫秒)統計,包含最少時間、最大時間、平均時間等等,以下例子表示連線的存活週期最小(min)用了25毫秒,最長用了99毫秒,平均(avg)花費40毫秒,其存活週期的中位數時間為36毫秒,標準差時間用了11毫秒。



4. 成功與受測的網站伺服器建立TCP連接所使用的平 均時間(單位為毫秒),以下範例顯示平均時間為0.2毫秒。



5. 顯示網站伺服器回覆的連線(connection)數與 測試程式送出的連線數間的比值,即網站的回覆率,下例表示比值為1,顯示受測的網站伺服器百分之百回覆。



6. 顯示送出的要求(request)的速率,下面的 範例顯示每秒送出199.8的request(接近所下達的參數--rate),一般如果此數據低於--rate參數所下達的參數,通常是因為受測的網站伺服器處理已經飽和,而無法有效處理httpref所產生的要求。另外一個可能性在於執行httpref所在的主機上,效能並不足於產生如此大量的要求數量。



7. 顯示每個要求的長度,單位為byte,如下例表示 每個要求的長度為80 bytes。



8. 顯示httpref每秒所接收到之網站伺服器回 覆(response)的連線數相關統計數據,包含每秒最少收到的連線數等等,以下範例顯示,每秒收到的回覆數最少為198,每秒收到的回覆數平均為199,每秒收到的回覆數最多為200,而每秒收到的回覆數標準差為1:



9. 顯示受測的網站伺服器平均的回覆時間(單位為毫秒),其中response指的是httpref送出request封包到受測網站伺服器至測試程式收到受測網站伺服器回覆完成的平均時間。transfer指的是httpref送出request封包的第一個byte到受測網站伺服器至測試程式收到受測網站伺服器回覆的第一個byte的平均時間。就下面的範例來說,顯示回覆時間為38毫秒,transfer時間是1.5毫秒。



10. 顯示受測網站伺服器回覆的資料平均長度(單位 為byte),其中header指的是回覆訊息的表頭資訊長度,content為訊息的內容長度,footer則是訊息的結尾長度。



11. 顯示受測網站伺服器回覆的HTTP狀態碼統計數 目:



其中,HTTP狀態碼意義如表3所示。

表3 HTTP狀態編號代表意義 


12. 顯示httpref程式所使用的CPU資源情況:



13. 顯示網路卡每秒實際的傳輸量,要特別注意是, 在此的單位為(kilobytes,位元組),而非一般的kilobits(bit):



14. 顯示發生錯誤的個數統計。其中client-timo指的是 從httpref發送測試要求至網站伺服器而網站伺服未在時限(由--timeout參數指定)內回覆的次數,這個數值通常可用來測試受測網站伺服器的最大連線數的門檻值。如果httpref發送了超過受測網站伺服器所能承受的連線量,那麼受測網站伺服器將無法即時處理。如此大量的連線而無法即時在時限內回覆測試程式,就會產生大量的client-timo錯誤,管理者可藉此評估受測網站伺服器的最大連線量的門檻值。



‧socket-timo:這是計算在與受測網站伺服器進行TCP連線的時候,所發生的SOCKET層級錯誤的次數。

‧Connrefused:表示計算httpref發出要求封包至受測網站伺服器,被網站伺服器拒絕(refuse)的次數。

‧Connreset:代表的是計算測試程式發出要求封包至受測網站伺服器,被網站伺服器重置(reset)的次數。

安裝並使用autobench 

由於httpref的指令模式過於繁雜,也因此又有人發展出autobench程式,這是一個將httpref包裝起來的程式,使用者可以利用這個程式輕易地控制httpref的測試功能。

autobench程式除了可以同時用相同的測試條件測試不同的網站伺服器的效能外,另外一個特色在於,可將測試結果輸出成圖檔所需的文字資訊後,再利用gnuplot將文字輸出的結果轉換圖檔,讓使用者能更直覺地查看。

autobench程式的安裝方式相當簡單,將原始檔下載並解壓縮後,然後下達下列指令即可(如下#為註解):



安裝成功後,autobench提供一個組態檔(名稱為autobench.conf)以及兩個主要執行檔(autobench和bench2graph),其中autobench為主要執行檔,用來下達測試的各項條件(條件可定義在autobench.conf或利用指令參數的方式下達,本文將僅討論以指令方式下達條件)。

另一個bench2graph程式,則是透過gnuplot將autobench所產生的圖形資訊製作成圖檔。autobench提供的參數如表4所示。

表4 autobench使用參數


以下面範例來說,僅測試單一個主機,且該主機的IP資訊為192.168.1.1,而測試的網頁檔案名稱是index.php。此外,每個連線數(connection)包含10個要求(request)。

設定開始測試的時候,先行採用每秒20個連線數,而後每次均累加20個連線數/秒,直到最高200連線數/秒,設定測試的總連線數不得超過5,000個。當中如果有要求在5秒內沒有收到回覆(即逾時),就視為錯誤。最後,將測試結果寫入results.tsv檔案內:



在執行完畢後,會產生一個內存測試結果,可用來產生圖檔的圖形資訊的檔案。產生測試結果檔後,利用autobench提供的另外一支程式(名稱為bench2graph)與gnuplot程式搭配,再依據上述所得到的results.tsv檔案來產生測試結果圖形檔案,讓使用者能夠更直覺地查看測試結果資料。

首先,安裝gnuplot程式。經測試後發現,發現只有gnuplot 4.2.0版本(其他的版本都有出現無法支援選項的問題)可以正常產生圖檔。

基於以上的理由,這裡採用gnuplot 4.2.0版本。下載並解壓縮後,直接用下列指令編譯(#為註解):



在測試過程中還發現到另外一個問題,亦即bench2graph也要需要修正,否則也會無法正常產生相關圖檔,因此利用sed程式來置換bench2graph的相關字元,指令如下(其中#為註解):



ff 最後,執行以下指令(會要求使用者輸入標題資訊,如圖2的標題資訊):



g 執行該指令之後,將利用results.tsv內的資訊產生一個測試結果圖形,如圖2所示,其中X軸資訊為要求的數目,Y軸資訊為連線數的數目。


▲圖2 利用results.tsv內的資訊所產生的測試結果圖形。

如此一來,使用者就可以利用此類圖形更加直覺地掌握網站伺服器的效能狀況了。

<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。> 

轉載自《網管人