1. 程式人生 > >web伺服器效能測試---伺服器效能測試例項

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