- Apache Bench 教程
- Apache Bench - 首頁
- Apache Bench - 概述
- Apache Bench - 環境設定
- 測試我們的示例應用程式
- 同時測試多個 URL
- 動態頁面測試準備
- 動態頁面的順序測試用例
- 輸出比較
- Apache Bench 有用資源
- Apache Bench - 快速指南
- Apache Bench - 有用資源
- Apache Bench - 討論
Apache Bench - 環境設定
在本章中,我們將指導您如何在 VPS 上為 Apache Bench 設定環境。
系統需求
記憶體 − 128 MB
磁碟空間 − 無最低要求
作業系統 − 無最低要求
安裝 Apache Bench
Apache Bench 是一個獨立的應用程式,並且不依賴於 Apache Web 伺服器的安裝。以下是安裝 Apache Bench 的兩步過程。
步驟 1 − 更新軟體包資料庫。
# apt-get update
請注意,終端命令前的符號 # 表示 root 使用者正在發出該命令。
步驟 2 − 安裝 apache2 utils 軟體包以訪問 Apache Bench。
# apt-get install apache2-utils
Apache Bench 現在已安裝。如果您想測試託管在同一 VPS 上的 Web 應用程式,則只需安裝 Apache Web 伺服器即可 -
# apt-get install apache2
作為 Apache 實用程式,Apache Bench 在安裝 Apache Web 伺服器時會自動安裝。
驗證 Apache Bench 安裝
現在讓我們看看如何驗證 Apache Bench 安裝。以下程式碼將幫助驗證安裝 -
# ab -V
輸出
This is ApacheBench, Version 2.3 <$Revision: 1604373 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/
當您看到上述終端輸出時,表示您已成功安裝 Apache Bench。
建立特權 Sudo 使用者
從安全形度來看,建議系統管理員建立 sudo 使用者而不是以 root 身份工作。我們將建立一個名為 test 的測試使用者,用於此目的 -
# useradd -m -d /home/test -g sudo test
讓我們為新使用者設定密碼 -
# passwd test
系統將提示您為使用者 test 輸入新密碼。您可以輸入一個簡單的密碼,因為我們只是在測試,而不是部署到生產伺服器。通常,sudo 命令會提示您提供 sudo 使用者密碼;建議不要使用複雜密碼,因為此過程會變得麻煩。
輸出
Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
測試 Apache.org 網站
在本節中,我們將測試 Apache.org 網站。讓我們首先切換到 sudo 使用者 test -
# su test
首先,我們將測試 Apache 組織的網站,https://www.apache.org/。我們將首先執行命令,然後理解輸出 -
$ ab -n 100 -c 10 https://www.apache.org/
這裡-n是為基準測試會話執行的請求數。預設值是隻執行一個請求,這通常會導致基準測試結果不具有代表性。
並且-c是併發性,表示一次執行多個請求的數量。預設值是一次一個請求。
因此,在此測試中,Apache Bench 將以 10 的併發性向 Apache 組織伺服器發出 100 個請求。
輸出
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.apache.org (be patient).....done
Server Software: Apache/2.4.7
Server Hostname: www.apache.org
Server Port: 443
SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256
Document Path: /
Document Length: 58769 bytes
Concurrency Level: 10
Time taken for tests: 1.004 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 5911100 bytes
HTML transferred: 5876900 bytes
Requests per second: 99.56 [#/sec] (mean)
Time per request: 100.444 [ms] (mean)
Time per request: 10.044 [ms] (mean, across all concurrent requests)
Transfer rate: 5747.06 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 39 46 30.9 41 263
Processing: 37 40 21.7 38 255
Waiting: 12 15 21.7 13 230
Total: 77 86 37.5 79 301
Percentage of the requests served within a certain time (ms)
50% 79
66% 79
75% 80
80% 80
90% 82
95% 84
98% 296
99% 301
100% 301 (longest request)
執行我們的第一個測試後,很容易識別此命令的使用模式,如下所示 -
# ab [options .....] URL
其中,
ab − Apache Bench 命令
options − 我們要執行的特定任務的標誌
URL − 我們要測試的路徑 URL
理解輸出值
我們需要了解不同的指標以理解 ab 返回的各種輸出值。以下是列表 -
伺服器軟體 − 這是第一個成功返回的 HTTP 標頭中返回的 Web 伺服器名稱。
伺服器主機名 − 這是命令列上給定的 DNS 或 IP 地址。
伺服器埠 − 這是 ab 連線到的埠。如果命令列上未給出埠,則預設為 http 的 80 和 https 的 443。
SSL/TLS 協議 − 這是客戶端和伺服器之間協商的協議引數。僅當使用 SSL 時才會列印此內容。
文件路徑 − 這是從命令列字串解析的請求 URI。
文件長度 − 它是第一個成功返回的文件的大小(以位元組為單位)。如果文件長度在測試期間發生變化,則響應被視為錯誤。
併發級別 − 這是測試期間使用的併發客戶端(相當於 Web 瀏覽器)的數量。
測試花費的時間 − 這是從建立第一個套接字連線的那一刻到接收最後一個響應的那一刻所花費的時間。
完成的請求 − 收到的成功響應數。
失敗的請求 − 被視為失敗的請求數。如果此數字大於零,則將列印另一行,顯示由於連線、讀取、內容長度不正確或異常而導致失敗的請求數。
總傳輸量 − 從伺服器接收到的位元組總數。此數字本質上是從網路上傳輸的位元組數。
HTML 傳輸量 − 從伺服器接收到的文件位元組總數。此數字不包括在 HTTP 標頭中接收到的位元組
每秒請求數 − 這是每秒請求數。此值是將請求數除以總花費時間的計算結果。
每個請求的時間 − 平均每個請求花費的時間。第一個值使用公式 concurrency * timetaken * 1000 / done 計算,而第二個值使用公式 timetaken * 1000 / done 計算
傳輸速率 − 使用公式 totalread / 1024 / timetaken 計算的傳輸速率。
負載測試輸出的快速分析
在瞭解了 ab 命令輸出值的標題後,讓我們嘗試分析和理解我們初始測試的輸出值 -
Apache 組織正在使用他們自己的 Web 伺服器軟體 - Apache(版本 2.4.7)
由於 https,伺服器正在埠 443 上偵聽。如果是 http,它將是 80(預設值)。
100 個請求的總資料傳輸量為 58769 位元組。
測試在 1.004 秒內完成。沒有失敗的請求。
每秒請求數 - 99.56。這被認為是一個相當不錯的數字。
每個請求的時間 - 100.444 毫秒(對於 10 個併發請求)。因此,在所有請求中,它是 100.444 毫秒/10 = 10.044 毫秒。
傳輸速率 - 接收到的 1338.39 [Kbytes/sec]。
在連線時間統計資訊中,您可以觀察到許多請求必須等待幾秒鐘。這可能是由於 apache web 伺服器將請求放入等待佇列中。
在我們的第一個測試中,我們測試了託管在不同伺服器上的應用程式(即 www.apache.org)。在本教程的後面部分,我們將測試託管在與我們執行 ab 測試相同的伺服器上的示例 Web 應用程式。這是為了便於學習和演示。理想情況下,主機節點和測試節點應該不同,以便進行準確的測量。
為了更好地學習 ab,您應該比較和觀察輸出值在不同情況下如何變化,因為我們將在本教程中繼續前進。
繪製 Apache Bench 的輸出
在這裡,我們將繪製相關結果以檢視伺服器隨著請求數量的增加需要花費多長時間。為此,我們將在先前的命令中新增-g選項,後跟 ab 輸出資料將儲存到的檔名(此處為 out.data) -
$ ab -n 100 -c 10 -g out.data https://www.apache.org/
現在讓我們看看out.data,然後我們建立繪圖 -
$ less out.data
輸出
starttime seconds ctime dtime ttime wait Tue May 30 12:11:37 2017 1496160697 40 38 77 13 Tue May 30 12:11:37 2017 1496160697 42 38 79 13 Tue May 30 12:11:37 2017 1496160697 41 38 80 13 ...
現在讓我們瞭解out.data檔案中的列標題 -
starttime − 這是呼叫開始的日期和時間。
seconds − 與 starttime 相同,但採用 Unix 時間戳格式(date -d @1496160697 返回 starttime 輸出)。
ctime − 這是連線時間。
dtime − 這是處理時間。
ttime − 這是總時間(在數學上,ttime = ctime + dtime)。
wait − 這是等待時間。
有關這些多個專案如何相互關聯的圖形化視覺化,請檢視以下影像 -
如果我們正在終端或圖形不可用的地方工作,gnuplot是一個不錯的選擇。我們將透過以下步驟快速瞭解它。
讓我們安裝並啟動 gnuplot -
$ sudo apt-get install gnuplot $ gnuplot
輸出
G N U P L O T Version 4.6 patchlevel 6 last modified September 2014 Build System: Linux x86_64 Copyright (C) 1986-1993, 1998, 2004, 2007-2014 Thomas Williams, Colin Kelley and many others gnuplot home: http://www.gnuplot.info faq, bugs, etc: type "help FAQ" immediate help: type "help" (plot window: hit 'h') Terminal type set to 'qt' gnuplot>
由於我們正在終端上工作,並假設圖形不可用,我們可以選擇啞終端,它將在終端本身輸出 ASCII。這有助於我們瞭解我們使用此快速工具的繪圖外觀。現在讓我們準備終端以進行 ASCII 繪圖。
gnuplot> set terminal dumb
輸出
Terminal type set to 'dumb' Options are 'feed size 79, 24'
由於我們的 gnuplot 終端現在已準備好進行 ASCII 繪圖,讓我們繪製out.data檔案中的資料 -
gnuplot> plot "out.data" using 9 w l
輸出
1400 ++-----+------+-----+------+------+------+------+-----+------+-----++
+ + + + + + +"out.data" using 9 ****** +
| |
1200 ++ ********************************************
| ******************* |
1000 ++ * ++
| * |
| * |
800 ++ * ++
| * |
| * |
600 ++ * ++
| * |
| * |
400 ++ * ++
| * |
200 ++ * ++
| * |
+**** + + + + + + + + + +
0 ++-----+------+-----+------+------+------+------+-----+------+-----++
0 10 20 30 40 50 60 70 80 90 100
我們繪製了 ttime,總時間(以毫秒為單位),來自第 9 列,相對於請求數。我們可以注意到,對於最初的十個請求,總時間接近 100 毫秒,對於接下來的 30 個請求(從第 10 個到第 40 個),它增加到 1100 毫秒,依此類推。您的繪圖必須根據您的out.data有所不同。