發表於2年前(2013-03-21 12:13) 閱讀(
1146) | 評論(1) 1人收藏此文章, 我要收藏
咱們經常使用apache下的併發測試工具ab進行動態或靜態頁面URL的併發測試,以此做爲服務器性能、配置以及系統架構是否合乎要求的一個衡量標準。 可是有一個問題,就是ab的表現並不穩定,在不一樣的機器上用ab對同一個服務器上的URL資源作測試經常出現大相徑庭的數據。就算在同一臺機器上用ab作 測試,測試10組數據,也會有幾組的數據存在較大的差別,如下是我曾作過的幾組試驗,先介紹下試驗步驟及環境。
一、首先準備一臺機器做爲web服務器,硬件配置爲硬件配置爲Intel(R) Celeron(R) CPU G530 @ 2.40GHz 32位 內存4G 雙核,系統版本CentOS release 5.5,web服務器版本Apache/2.2.14。
二、web服務器採用apache,採用worker模式,具體配置爲:
默認開啓5個進程,每一個進程下2個線程,最大開75個線程(此參數關係到實際系統開啓的進程數,若是開啓進程設置過多,以最大線程數爲準),最大鏈接數爲500。
三、apache以調用php模塊的方式執行php腳本(非fast-cgi模式)。
四、首先在兩臺不一樣的機器上對此服務器用ab進行壓測,將兩臺不一樣的機器編號爲A與B,A爲一臺筆記本,性能較差,2G內存,且上面運行了一些程序佔用 了必定比率的CPU及內存。B爲一臺臺式機,硬件配置爲CPU Intel G530 2.4GHz 內存 4GB,下面是測試數據:
A
50個併發,執行50次頁面(每一個鏈接執行一次頁面,頁面爲phpinfo頁面)
平均執行時間在17~18秒 簡直不能忍
B
50個併發,執行50次頁面
平均執行時間在0.2秒左右 毫無壓力(3次平均)
100個併發,執行100次頁面
平均執行時間在0.4秒左右 (3次平均)
200個併發,執行200次頁面
平均執行時間在0.8秒左右(3次平均)
用A機器進行的測試結果,併發量連50都達不到,但用B機器測試WEB服務器能夠勝任200個併發處理。爲何會出現如此大相徑庭的數據差異,仍是要從原理上來分析。
ab是客戶端模擬多線程來經過socket對服務器發起TCP請求,並等待服務器處理執行頁面輸出頁面結果並返回到客戶端以此來計算頁面的執行時間等相 關數據。那麼客戶端CPU處理多線程的能力,測試時客戶機的CPU狀態、內存狀態都會對測試結果形成影響,若是客戶機同時處理這麼多請求的能力很弱,那麼 須要很長時間才能將請求發送到服務器,服務器處理完後也須要很長時間對返回數據作處理,這樣就達不到測試服務器性能的要求了。由於時間都被客戶機耗去了。 因此咱們在測試的時候首先要選擇好測試機,儘可能選擇性能較好的機器測試。由於得出的結論是天差地別的。
五、接下來咱們單獨用B機器進行測試,進行高強度的測試,連續測試20組數據,以200個併發、執行200次頁面爲測試條件,測試頁面仍是phpinfo頁面,如下是測試數據:
每秒請求數:237 每一個請求執行時間:843
每秒請求數:237 每一個請求執行時間:843
每秒請求數:237 每一個請求執行時間:843
每秒請求數:237 每一個請求執行時間:843
每秒請求數:237 每一個請求執行時間:843
每秒請求數:237 每一個請求執行時間:843
每秒請求數:237 每一個請求執行時間:843
每秒請求數:237 每一個請求執行時間:843
每秒請求數:237 每一個請求執行時間:843
每秒請求數:237 每一個請求執行時間:843
每秒請求數:237 每一個請求執行時間:843
每秒請求數:237 每一個請求執行時間:843
每秒請求數:237 每一個請求執行時間:843
每秒請求數:237 每一個請求執行時間:843
每秒請求數:237 每一個請求執行時間:843
每秒請求數:237 每一個請求執行時間:843
每秒請求數:237 每一個請求執行時間:843
每秒請求數:237 每一個請求執行時間:843
每秒請求數:237 每一個請求執行時間:843
測試結果很是穩定,沒有大差別的結果。那麼用300個併發、執行300次頁面爲測試條件結果會是怎樣呢,如下是測試數據:
每秒請求數:79 每一個請求執行時間:3765
每秒請求數:80 每一個請求執行時間:3718
每秒請求數:81 每一個請求執行時間:3671
每秒請求數:80 每一個請求執行時間:3750
每秒請求數:79 每一個請求執行時間:3796
每秒請求數:81 每一個請求執行時間:3687
每秒請求數:79 每一個請求執行時間:3765
每秒請求數:82 每一個請求執行時間:3656
每秒請求數: 81 每一個請求執行時間:3703
每秒請求數: 82 每一個請求執行時間:3640
在高併發下的執行結果也比較穩定。
六、接下來咱們在web服務器上進行測試,看測試結果是怎樣的,測試10組數據 以200個併發、執行200次頁面爲測試條件,測試頁面爲phpinfo頁面,如下是測試數據:
每秒請求數:1716 每一個請求執行時間:116
每秒請求數:1764 每一個請求執行時間:113
每秒請求數:1706 每一個請求執行時間:117
每秒請求數:1643 每一個請求執行時間:114
每秒請求數:1767 每一個請求執行時間:113
每秒請求數:1732 每一個請求執行時間:115
每秒請求數:727 每一個請求執行時間:274
每秒請求數:249 每一個請求執行時間:801
每秒請求數:1728 每一個請求執行時間:115
每秒請求數:113每一個請求執行時間: 1765
以上結果,比在B機器上表現的更好,但存在幾個不穩定的數據。分析一下,一方面是網絡傳輸速度的緣由致使(本機上網絡傳輸速度更快,因此成績較好)。另外一 方面是因爲ab自己在執行的時候消耗的cpu的性能,但這個個人觀點是影響能夠忽略不計。還有一方面致使數據不穩定的因素多是因爲TCP鏈接在上一次測 試時爲徹底釋放致使的緣由。
綜上所述,對於測試web服務器的性能,咱們最好能夠找一臺獨立的、性能較好的、而且上面沒有運行不少應用程序的機器進行測試,這樣的結果會更接近生產環 境的實際結果。實際的php頁面執行復雜度多是phpinfo的好幾倍,因此在選定測試頁面時,能夠預先作一些複雜度更高的php頁面進行測試,這樣測 試的準確度會更高。