即ab的主要邏輯包含在test方法中。test方法首先進行了一些全域性的初始化工作。其中,最重要的乙個資料結構是陣列struct connection con[c],代表同時存在的c個客戶端連線。struct connection的結構如下:
struct connection
start_connect首先建立乙個socket埠並將其設定為非阻塞,這樣呼叫connect時就會立即返回einprogress錯誤,但tcp三步握手仍在後台進行。通過這種方式,就可以同時發起多個連線,從而模擬多個客戶端請求伺服器的場景。start_connect的主要邏輯如下:
re = apr_connect(sock);
if(re == einprogress)
else if(re == success)
else
返回test 方法,在建立完成初始的連線之後,test開始使用epoll來監聽連線完成、有新的響應資料等事件並進行處理:
dowhile (status == eintr);
for(i = 0;i < n;++i)
if(rv & arp_pollout)
else}}
}
}while(未完成)
上文中提到的write_request和read_connection分別為向伺服器發出請求以及從伺服器讀取響應資料的方法。其中write_request方法會將預先建立好的http請求的內容一次性傳送出去;而read_connection則嘗試讀取、解析伺服器端響應並在讀取到eof後呼叫close_connection方法關閉當前連線。
最後, close_connection方法除了關閉socket埠、記錄結果外,如果請求數未達到要求時還會復用要關閉的struct connection,重新呼叫start_connect發起連線請求,從而推進測試任務。
在一般的作業系統中,單個程序能夠新建的執行緒數量是有限的。通過使用非同步connect的方式代替多執行緒,ab可以提高客戶端能夠達到的併發程度,從而提高測試能力。雖然ab本身是針對http伺服器的測試工具,但這種設計可以被用來對任何伺服器端程式進行併發性測試。
ab壓力測試工具
系統centos6.8 1 安裝ab 直接安裝好阿帕奇同時也安裝好了ab工具 不想安裝阿帕奇時可使用如下命令 2 ab命令引數解釋 n 在測試會話中所執行的請求個數。預設時,僅執行乙個請求。c 一次產生的請求個數。預設是一次乙個。t 測試所進行的最大秒數。其內部隱含值是 n 50000,它可以使對伺...
AB壓力測試工具
吞吐率 requests per second 概念 伺服器併發處理能力的量化描述,單位是reqs s,指的是某個併發使用者數下單位時間內處理的請求數。某個併發使用者數下單位時間內能處理的最大請求數,稱之為最大吞吐率。計算公式 總請求數 處理完成這些請求數所花費的時間,即 request per s...
ab壓力測試工具
1 用法1 之前需要加上 ab c 10 n 100 ab c 10 n 100 c10表示併發使用者數為10 可以理解為開啟了10個工作執行緒或程序 n100表示請求總數為100 2 用法2加上user agent 從日誌上面可以看到user agent變成了wuhan agent 125 非正常...