PS:網站性能壓力測試是性能調優過程中必不可少的一環。只有讓服務器處在高壓情況下才能真正體現出各種設置所暴露的問題。Apache中有個自帶的,名爲ab的程序,可以對Apache或其它類型的服務器進行網站訪問壓力測試。
ApacheBench命令原理:
ab命令會創建很多的併發訪問線程,模擬多個訪問者同時對某一URL地址進行訪問。它的測試目標是基於URL的,因此,既可以用來測試Apache的負載壓力,也可以測試nginx、lighthttp、tomcat、IIS等其它Web服務器的壓力。ab命令對發出負載的計算機要求很低,既不會佔用很高CPU,也不會佔用很多內存,但卻會給目標服務器造成巨大的負載,其原理類似CC***。自己測試使用也須注意,否則一次上太多的負載,可能造成目標服務器因資源耗完,嚴重時甚至導致死機。
格式:# ab [options] [http://]hostname[:port]/path 參數說明: -n requests Number of requests to perform //在測試會話中所執行的請求個數(本次測試總共要訪問頁面的次數)。默認時,僅執行一個請求。 -c concurrency Number of multiple requests to make //一次產生的請求個數(併發數),就相當於一定是同時處理這個多個併發,處理完就是一個事務。默認是一次一個。
ApacheBench用法詳解:在Linux系統,一般安裝好Apache後可以直接執行;
# ab -n 1000 -c 100 http://10.1.1.128/test.php //n後面的代表總共發出1000個請求;-c後面的100表示採用100個併發(模擬100個人同時訪問),後面的網址表示測試的目標URL。
結果分析:
Document Path: /test.php
#測試的頁面
Document Length: 15 bytes
#頁面大小
Concurrency Level: 100
#測試的併發數,也是-c選項
Time taken for tests: 0.575 seconds
#整個測試持續的時間
Complete requests: 1000
#完成的請求數量
Failed requests: 0
#失敗的請求數量
Write errors: 0
Total transferred: 171171 bytes
#整個過程中的網絡傳輸量
HTML transferred: 15015 bytes
#整個過程中的HTML內容傳輸量
Requests per second: 1739.26 [#/sec] (mean)
#最重要的指標之一,相當於LR中的每秒事務數,後面括號中的mean表示這是一個平均值
Time per request: 57.496 [ms] (mean)
#最重要的指標之二,相當於LR中的平均事務響應時間,後面括號中的mean表示這是一個平均值 ----》計算公式:事務量=n/c,事務平均響應時間=總耗時/事務量
Time per request: 0.575 [ms] (mean, across all concurrent requests)
#每個連接請求實際運行時間的平均值
Transfer rate: 290.73 [Kbytes/sec] received
#平均每秒網絡上的流量,可以幫助排除是否存在網絡流量過大導致響應時間延長的問題
Connection Times (ms) min mean[+/-sd] median max Connect: 0 6 8.5 1 28 Processing: 1 49 18.4 51 113 Waiting: 0 46 17.2 49 91 Total: 11 55 19.5 54 140
#整個場景中所有請求的響應情況。在場景中每個請求都有一個響應時間,其中50%的用戶響應時間小於54毫秒,66%的用戶響應時間小於58毫秒,最大的響應時間小於140毫秒。對於併發請求,cpu實際上並不是同時處理的,而是按照每個請求獲得的時間片逐個輪轉處理的,所以基本上第一個Time per request時間約等於第二個Time per request時間乘以併發請求數。
總結:在遠程對web服務器進行壓力測試,往往效果不理想(因爲網絡延時過大),建議使用內網的另一臺或者多臺服務器通過內網進行測試,這樣得出的數據,準確度會高很多。如果只有單獨的一臺服務器,可以直接本地測試,比遠程測試效果要準確。
本文來自個人博客:http://www.forgecode.cn/250.html