吞吐率(Requests per second) 概念:服務器併發處理能力的量化描述,單位是reqs/s,指的是某個併發用戶數下單位時間內處理的請求數。某個併發用戶數下單位時間內能處理的最大請求數,稱之爲最大吞吐率。 計算公式:總請求數 / 處理完成這些請求數所花費的時間,即 Request per second = Complete requests / Time taken for tests QPS(每秒查詢數)、TPS(每秒事務數)是吞吐量的經常使用量化指標,另外還有HPS(每秒HTTP請求數)。 跟吞吐量有關的幾個重要是:併發數、響應時間。 QPS(TPS),併發數、響應時間它們三者之間的關係是: QPS(TPS)= 併發數/平均響應時間 對於無併發的應用系統而言,吞吐量與響應時間成嚴格的反比關係,實際上此時吞吐量就是響應時間的倒數。前面已經說過,對於單用戶的系統,響應時間(或者系統響應時間和應用延遲時間)能夠很好地度量系統的性能,但對於併發系統,一般須要用吞吐量做爲性能指標。 對於一個多用戶的系統,若是隻有一個用戶使用時系統的平均響應時間是t,當有你n個用戶使用時,每一個用戶看到的響應時間一般並非n×t,而每每比n×t小不少(固然,在某些特殊狀況下也可能比n×t大,甚至大不少)。
這是由於處理每一個請求須要用到不少資源,因爲每一個請求的處理過程當中有許多不走難以併發執行,這致使在具體的一個時間點,所佔資源每每並很少。也就是說在處理單個請求時,在每一個時間點均可能有許多資源被閒置,當處理多個請求時,
若是資源配置合理,每一個用戶看到的平均響應時間並不隨用戶數的增長而線性增長。實際上,不一樣系統的平均響應時間隨用戶數增長而增加的速度也不大相同,這也是採用吞吐量來度量併發系統的性能的主要緣由。通常而言,吞吐量是一個比較通用的指標,兩個具備不一樣用戶數和用戶使用模式的系統,
若是其最大吞吐量基本一致,則能夠判斷兩個系統的處理能力基本一致。
併發鏈接數(The number of concurrent connections) 概念:某個時刻服務器所接受的請求數目,簡單的講,就是一個會話。
併發用戶數(The number of concurrent users,Concurrency Level) 概念:要注意區分這個概念和併發鏈接數之間的區別,一個用戶可能同時會產生多個會話,也即鏈接數。 併發用戶數是指系統能夠同時承載的正常使用系統功能的用戶的數量。與吞吐量相比,併發用戶數是一個更直觀但也更籠統的性能指標。實際上,併發用戶數是一個很是不許確的指標,由於用戶不一樣的使用模式會致使不一樣用戶在單位時間發出不一樣數量的請求。
一網站系統爲例,假設用戶只有註冊後才能使用,但註冊用戶並非每時每刻都在使用該網站,所以具體一個時刻只有部分註冊用戶同時在線,在線用戶就在瀏覽網站時會花不少時間閱讀網站上的信息,於是具體一個時刻只有部分在線用戶同時向系統發出請求。
這樣,對於網站系統咱們會有三個關於用戶數的統計數字:註冊用戶數、在線用戶數和同時發請求用戶數。因爲註冊用戶可能長時間不登錄網站,使用註冊用戶數做爲性能指標會形成很大的偏差。而在線用戶數和同事發請求用戶數均可以做爲性能指標。
相比而言,以在線用戶做爲性能指標更直觀些,而以同時發請求用戶數做爲性能指標更準確些。
用戶平均請求等待時間(Time per request) 計算公式:處理完成全部請求數所花費的時間/ (總請求數 / 併發用戶數),即 Time per request = Time taken for tests /( Complete requests / Concurrency Level)
服務器平均請求等待時間(Time per request: across all concurrent requests) 計算公式:處理完成全部請求數所花費的時間 / 總請求數,即 Time taken for / testsComplete requests 能夠看到,它是吞吐率的倒數。 同時,它也=用戶平均請求等待時間/併發用戶數,即Time per request / Concurrency Level
QPS每秒查詢率(Query Per Second) 每秒查詢率QPS是對一個特定的查詢服務器在規定時間內所處理流量多少的衡量標準,在因特網上,做爲域名系統服務器的機器的性能常常用每秒查詢率來衡量。對應fetches/sec,即每秒的響應請求數,也便是最大吞吐能力。 (看來是相似於TPS,只是應用於特定場景的吞吐量)
響應時間(RT) 響應時間是指系統對請求做出響應的時間。直觀上看,這個指標與人對軟件性能的主觀感覺是很是一致的,由於它完整地記錄了整個計算機系統處理請求的時間。因爲一個系統一般會提供許多功能,而不一樣功能的處理邏輯也千差萬別,於是不一樣功能的響應時間也不盡相同,
甚至同一功能在不一樣輸入數據的狀況下響應時間也不相同。因此,在討論一個系統的響應時間時,人們一般是指該系統全部功能的平均時間或者全部功能的最大響應時間。固然,每每也須要對每一個或每組功能討論其平均響應時間和最大響應時間。 對於單機的沒有併發操做的應用系統而言,人們廣泛認爲響應時間是一個合理且準確的性能指標。須要指出的是,響應時間的絕對值並不能直接反映軟件的性能的高低,軟件性能的高低實際上取決於用戶對該響應時間的接受程度。對於一個遊戲軟件來講,響應時間小於100毫秒應該是不錯的,
響應時間在1秒左右可能屬於勉強能夠接受,若是響應時間達到3秒就徹底難以接受了。而對於編譯系統來講,完整編譯一個較大規模軟件的源代碼可能須要幾十分鐘甚至更長時間,但這些響應時間對於用戶來講都是能夠接受的。
安裝ab測試工具nginx
yum install httpd-tools -y
ab工具幫助
ab是Apache超文本傳輸協議(HTTP)的性能測試工具。其設計意圖是描繪當前所安裝的Apache的執行性能,主要是顯示你安裝的Apache每秒能夠處理多少個請求。apache
命令格式: ./ab [options] [http://]hostname[:port]/path 命令參數: -A:指定鏈接服務器的基本的認證憑據; -c:指定一次向服務器發出請求數; -C:添加cookie; -g:將測試結果輸出爲「gnuolot」文件; -h:顯示幫助信息; -H:爲請求追加一個額外的頭; -i:使用「head」請求方式; -k:激活HTTP中的「keepAlive」特性; -n:指定測試會話使用的請求數; -p:指定包含數據的文件; -q:不顯示進度百分比; -T:使用POST數據時,設置內容類型頭; -v:設置詳細模式等級; -w:以HTML表格方式打印結果; -x:以表格方式輸出時,設置表格的屬性; -X:使用指定的代理服務器發送請求; -y:以表格方式輸出時,設置表格屬性。 參數不少,通常咱們用 -c表示併發數 -n 表示請求數便可 若是隻用到一個Cookie,那麼只需鍵入命令: ab -n 100 -C key=value http://test.com/ 若是須要多個Cookie,就直接設Header: ab -n 100 -H 「Cookie: Key1=Value1; Key2=Value2」 http://test.com/
使用舉例:bash
[root@c75 ~]# ab -n 1000 -c 1000 http://192.168.255.209/monitor This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.255.209 (be patient) Completed 100 requests Completed 200 requests Completed 300 requests Completed 400 requests Completed 500 requests Completed 600 requests Completed 700 requests Completed 800 requests Completed 900 requests Completed 1000 requests Finished 1000 requests Server Software: nginx/1.14.0 Server Hostname: 192.168.255.209 Server Port: 80 Document Path: /monitor Document Length: 185 bytes Concurrency Level: 1000 //併發請求數 Time taken for tests: 2.252 seconds //整個測試持續的時間 Complete requests: 1000 //完成的請求數 Failed requests: 0 //失敗的請求數 Write errors: 0 //寫入失敗數 Non-2xx responses: 1000 //非2xx狀態請求數 Total transferred: 386000 bytes //傳輸的總字節數大小 HTML transferred: 185000 bytes //傳輸的總文檔字節數大小 Requests per second: 444.05 [#/sec] (mean) //每秒處理的請求數 Time per request: 2252.008 [ms] (mean) //每一個請求花費的平均時間 Time per request: 2.252 [ms] (mean, across all concurrent requests) Transfer rate: 167.39 [Kbytes/sec] received //轉移率 Connection Times (ms) min mean[+/-sd] median max Connect: 6 40 14.2 36 69 //建立TCP鏈接到服務器或者代理服務器所花費的時間 Processing: 40 738 722.9 302 2138 //寫入緩衝區消耗+鏈路消耗+服務端消耗 Waiting: 11 546 595.8 293 1930 //寫入緩衝區消耗+鏈路消耗+服務端消耗+讀取數據消耗 Total: 45 778 733.0 344 2207 //總花費時間 Percentage of the requests served within a certain time (ms) 50% 344 66% 752 75% 1668 80% 1799 90% 1957 95% 2073 98% 2161 99% 2191 100% 2207 (longest request)