web伺服器效能測試---伺服器效能測試例項
WEB效能測試--伺服器
目錄
WEB 服務中,對於不同的請求,響應速度(效能)是不一樣的。對於靜態檔案的響應一般會很快,尤其是使用了前端快取技術的(例如 nginx 快取、varnish快取、CDN 快取等)。
下面將以靜態頁面的測試為例,詳細講解 WEB 服務效能測試方案。
在只有一臺裸機的情況下,響應速度會受限於伺服器的 CPU、記憶體、磁碟IO、資料庫QPS、檔案系統 等,所以需要在測試的時候,實時監控系統的情況。
請根據實際情況組建測試環境,如果要測試線上 WEB 服務,不怕影響服務質量的話,也可直接使用線上環境。
下表是我使用過的一個測試環境。
網路 |
公司內網 VLAN |
WEB Client 機器配置 |
CPU:Intel(R) Xeon(R) X3430 2.40GHz 4核 |
WEB Server 機器配置 |
CPU:Intel(R) Xeon(R) X5650 2.67GHz 24核 |
WEB Server |
Nginx 1.4.7 |
測試工具 |
Apache Bentch 2.3,簡稱 ab |
請求總數 |
根據需要自定義,請求太少測試沒意義,太多很耗時間。 一般在監控效能的時候,請求多一點,例如 1M,延長測試過程,方便檢視; 在測試併發數的時候,請求少一點,例如 10W,可以快速得出併發響應數。 |
測併發數 |
1, 50,100,150,200,300,500,1000 ... ,根據需要自定義 |
效能記錄工具 |
dstat |
伺服器效能引數 |
CPU負載、磁碟讀寫速度、網路流量、記憶體讀寫速度、系統負載 |
1、搭建 WEB Server過程略過
2、安裝模擬訪問工具 ab
如果機器已經安裝了 Apache httpd ,則一般都自帶 ab 工具,使用命令 which ab 可以找到 ab 的安裝路徑。如果找不到 ab 命令,請安裝 httpd 即可(Redhat):yum install httpd。
3、安裝效能檢視工具
Redhat:yum install -y dstat
4、測試命令以及引數
4.1、ab 命令引數
直接執行 ab 可以得到使用幫助,這裡說一下 ab 命令的常用引數:
-n |
客戶端發起的總請求數 |
-c |
客戶端併發請求數,即有多少個使用者同時發起請求 |
-k |
HTTP 長連線,預設沒有 -k 引數,使用的是短連線 |
url |
[http[s]://]hostname[:port]/path |
NOTE:一些低配置的機器,在執行 ab 命令的時候可能會出現問題,主要是開啟檔案數太小導致的。併發數越高,越容易出現這樣的問題。
4.2、測試結果解說
注: 1、mean是平均數的意思
2、第一個Time per request代表每個連結上單個請求的平均響應時間
第二個Time per request所有連結合計後單個請求的平均響應時間
它們之間的關係是:Tpr1=Tpr2*n,這裡的Tpr1=23.054,Tpr2=0.115,n=200。
3、下面將 Requests per second 簡稱為 RPS,第一個 Time per request 簡稱為 TPR
從 ConnectionTimes 可以看出,請求在建立到響應的過程中,哪個環節下消耗的時間比較多。
測試 WEBServerd的最大(佳)併發數
開啟網頁的速度(取決於請求響應時間)是一個很重要的使用者體驗。
然而請求響應時間存在小部分的極大值和極小值,那麼平均響應時間不能真實反映請求響應速度,所以取95% 在某時間閥值內(例如25ms)完成比較合理。
所以假設業務的需求是:95% 請求的響應時間 < 25ms 。
假定請求總數不變,每次測試時改變併發數連線數,倘若測試結果中,有95%的請求能在25ms內處理完成,則認為當前的併發響應數是最大(佳)併發數。
同時記錄伺服器 CPU、記憶體、系統、IO、網路流量 的情況。
5、系統性能分析命令
dstat -h可以獲取幫助資訊
命令解釋:dstat -t -c -dD sda1 -nN eth0-gyl
-t |
顯示時間戳 |
-c |
統計所有CPU 狀態 |
-dD sda1 |
統計磁碟分割槽 /dev/sda1 的讀寫速度,請根據實際情況指定分割槽,這裡為 /usr/local/nginx/html/index.html 這個檔案所在的分割槽 |
-nN eth0 |
統計網絡卡 eth0 的流量,請根據實際情況指定網絡卡 |
-g |
統計記憶體頁換入換出速度,一般希望的值是 0 0 |
-y |
統計 CPU 中斷 int 和 上下文切換 csw 資訊 |
--tcp |
tcp 連線狀態 |
-l |
統計系統負載資訊 |
在客戶端執行 ab 測試命令之前,預先執行 dsetat 命令,檢視測試前機器的狀態;等到測試的時候,再對比一下測試前後系統的狀態。
6、測試例子結果分析
這裡想要測試 WEB Server 的大體效能,只需要測試 Requests per second 的值即可。
6.1、短連結併發測試
每個命令執行 3 次,然後取平均值
……
6.2、長連結併發測試
……
6.3、測試結果
Complete requests |
Concurrency Level |
短連結 |
長連結 |
||
Time taken for tests |
Requests per second |
Time taken for tests |
Requests per second |
||
100000 |
1 |
85 |
1183 |
54 |
1839 |
100000 |
50 |
9.8 |
9756 |
7.7 |
12041 |
100000 |
100 |
6249 |
|||
100000 |
150 |
7432 |
|||
100000 |
200 |
7996 |
|||
100000 |
250 |
8584 |
|||
100000 |
300 |
7313 |
|||
100000 |
350 |
7189 |
|||
100000 |
400 |
8335 |
|||
100000 |
450 |
9545 |
|||
100000 |
500 |
9866 |
|||
100000 |
550 |
9965 |
|||
100000 |
600 |
9685 |
|||
100000 |
650 |
10124 |
|||
100000 |
700 |
10053 |
55 |
12297 |
|
100000 |
750 |
10204 |
|||
100000 |
800 |
9731 |
|||
100000 |
850 |
9921 |
|||
100000 |
900 |
9909 |
|||
100000 |
950 |
9908 |
|||
100000 |
1000 |
9067 |
|||
100000 |
1050 |
9871 |
|||
100000 |
1100 |
7669 |
|||
100000 |
1150 |
8849 |
使用excle做成表格,使測試結果更加形象
從圖中可知:WEBServer 對於請求 http://nginx.test.com/每秒的最大響應數為 1W 左右。
Nginx 官網說能達到 5W RPS,可見當前的 WEB Server 離那個目標還差很遠。
下圖是測試過程中,WEBServer 的效能監控記錄:dstat -t -c -dD sda1 -nN eth0 -gyl
測試前
短連結測試時(併發 700 )
長連線測試時(併發 700 )
測試前後,變化較大的有:
l 網絡卡流量
l CPU 中斷數量以及上下文切換數
l 1分鐘之內的系統負載
從效能監控記錄看,進行測試時,系統性能還處於一個比較空閒的狀態,負載較低。
結合測試的 RPS 和 系統性能,發現 WEB Server 還有很大的進步空間,需要進行更加深入的專業優化。
當然,這是一個很簡單的測試,如果涉及到比較負載的業務等,系統各方面的負載也會相應的增加的。
測試結果詳細記錄表
Document Path |
/ |
||||||||||||||||
Document Length |
555 bytes |
||||||||||||||||
Concurrency Level |
1 |
50 |
|||||||||||||||
Time taken for tests |
84.498 seconds |
||||||||||||||||
Complete requests |
100000 |
100000 |
|||||||||||||||
Failed requests |
0 |
||||||||||||||||
Write errors |
0 |
||||||||||||||||
Keep-Alive requests |
- |
||||||||||||||||
Total transferred |
75.3MB |
||||||||||||||||
HTML transferred |
52.9MB |
||||||||||||||||
Requests per second |
1183.47 |
||||||||||||||||
Time per request 1 |
0.845 [ms] |
||||||||||||||||
Time per request 2 |
0.845 [ms] |
||||||||||||||||
Transfer rate(received) |
911.87 KBps |
||||||||||||||||
Connection Times (ms) |
Connect |
0+/-0.4 |
|||||||||||||||
Processing |
0 |
||||||||||||||||
Waiting |
0 |
||||||||||||||||
Total |
1 |
||||||||||||||||
Percentage of the requests served within a certain time (ms) |
50% |
1 |
|||||||||||||||
66% |
1 |
||||||||||||||||
75% |
1 |
||||||||||||||||
80% |
1 |
||||||||||||||||
90% |
1 |
||||||||||||||||
95% |
1 |
||||||||||||||||
98% |
1 |
||||||||||||||||
99% |
2 |
||||||||||||||||
100% |
205 |