使用apache進行ab壓力測試詳解

2021-08-07 14:33:23 字數 4143 閱讀 9940

當你使用php(或其他程式語言)完成乙個web程式的開發,並且web程式在apache伺服器上正常執行的時候,你有沒有考慮過對你的apache伺服器及部署在其上的web程式進行一些壓力測試呢?

畢竟,真金不怕火煉,只要配置優化合理、程式**執行效能良好、硬體撐得住,通過壓力測試我們就能看到乙個喜人的成績

話又說回來,即使測試結果差強人意或者糟糕透了,我們也可以好好反思並找到「問題出在**」

ab,即apache benchmark,只要我們安裝了apache,就能夠在apache的安裝目錄中找到它。它的居住位址是apache安裝目錄/bin/ab.exe。現在,我們就來看看如何使用ab.exe來進行壓力測試。

在使用之前我們先來學習一下ab的用法。首先,我們輸入cmd開啟dos視窗,然後將更改當前工作目錄為:apache安裝目錄/bin/。然後鍵入幫助命令ab -help或者>ab,我們就可以看到如下的用法介紹介面。

ab的用法介紹:

通過上面的用法介紹可以得知,ab的使用方法就是輸入如下dos命令:

ab 

[可選的引數選項]

需要進行壓力測試的

url

此外,我們再根據上面的用法介紹介面來詳細了解每個引數選項的作用。-n

即requests,用於指定壓力測試總共的執行次數。

-c即concurrency,用於指定壓力測試的併發數。

-t即timelimit,等待響應的最大時間(單位:秒)。

-b即windowsize,tcp傳送/接收的緩衝大小(單位:位元組)。

-p即postfile,傳送post請求時需要上傳的檔案,此外還必須設定-t引數。

-u即putfile,傳送put請求時需要上傳的檔案,此外還必須設定-t引數。

-t即content-type,用於設定content-type請求頭資訊,例如:text/plain

-v即verbosity,指定列印幫助資訊的冗餘級別。

-w以html**形式列印結果。

-i使用head請求代替get請求。

-x插入字串作為table標籤的屬性。

-y插入字串作為tr標籤的屬性。

-z插入字串作為td標籤的屬性。

-c新增cookie資訊,例如:"apache=1234"(可以重複該引數選項以新增多個)。

-h新增任意的請求頭,例如:"accept-encoding: gzip",請求頭將會新增在現有的多個請求頭之後(可以重複該引數選項以新增多個)。

-a新增乙個基本的網路認證資訊,使用者名稱和密碼之間用英文冒號隔開。

-p新增乙個基本的**認證資訊,使用者名稱和密碼之間用英文冒號隔開。

-x指定使用的**伺服器和埠號,例如:"126.10.10.3:88"。

-v列印版本號並退出。

-k使用http的keepalive特性。

-k使用http的keepalive特性。

-d不顯示百分比。

-s不顯示預估和警告資訊。

-g輸出結果資訊到gnuplot格式的檔案中。

-e輸出結果資訊到csv格式的檔案中。

-r指定接收到錯誤資訊時不退出程式。

-h顯示用法資訊,其實就是ab -help

雖然ab可以配置的引數選項比較多,但是,一般情況下我們只需要使用形如ab -n 數字 -c 數字 url路徑的命令即可。譬如,我們對位於本地apache伺服器上、url為localhost/index.php(你想測試的url)的頁面進行壓力測試。測試總次數為5000,併發數為200(相當於200個使用者同時訪問,他們總共訪問5000次)

我們輸入dos命令ab -n 5000 -c 200 localhost/index.php,列印結果如下:

finished 5000 requests  完成了5000次請求   

server software: apache/2.4.23 (伺服器軟體名稱及版本資訊)

server hostname: localhost (伺服器主機名)

server port: 80 (伺服器端口)

document path: /wslt/public/index.php(供測試的url路徑)

document length: 55863 bytes (供測試的url返回的文件大小)

concurrency level: 200 (併發數)

time taken for tests: 648.119 seconds (壓力測試消耗的總時間)

complete requests: 5000 (壓力測試的總次數)

failed requests: 423 (失敗的請求數)

write errors: 0 (網路連線寫入錯誤數)

total transferred: 382617684 bytes (傳輸的總資料量)

html transferred: 380740646 bytes (html文件的總資料量)

requests per second: 4048.34 [#/sec] (mean) (平均每秒的請求數)

time per request: 25924.763 [ms] (mean) (所有併發使用者(這裡是200)都請求一次的平均時間)

time per request: 129.624 [ms] (mean, across all concurrent requests) (單個使用者請求一次的平均時間)

transfer rate: 782.78 [kbytes/sec] received (傳輸速率,單位:kb/s)

connection times (ms)

min mean[+/-sd] median max

connect: 0 0 0.3 0 5

processing: 7201 25589 2752.2 25301 33440

waiting: 7194 25580 2752.8 25293 33433

total: 7202 25589 2752.2 25301 33440

percentage of the requests served within a certain time (ms) 在一定時間內送達請求的百分比

50% 25301

66% 25826

75% 26399

80% 26852

90% 28435

95% 30542

98% 31489

99% 31731

100% 33440 (longest request)

在上面的測試中,我們設定的壓力測試總次數以及併發數並沒有讓伺服器感覺到什麼「壓力」,現在我們再來看乙個「壓力山大」的執行命令:ab -n 100000 -c 1000 localhost/index.php,這個時候apache就直接罷工——拒絕訪問了:

d:\wamp64\bin\apache\apache2.4.23\bin>ab -n 100000 -c 1000 localhost/

wslt/public/index.php

使用Apache的ab工具進行壓力測試

apache附帶的ab工具 本機使用的php環境是wamp整合環境,ab工具位於d wamp bin apache apache2.2.21 bin 非常容易使用,ab可以直接在web伺服器本地發起測試請求,這至關重要,因為有些時候我們需要測試的僅僅是伺服器的處理效能,並不想摻雜著網路傳輸時間的影響...

使用Apache的ab工具進行壓力測試

ab命令原理 apache的ab命令模擬多執行緒併發請求,測試伺服器負載壓力,也可以測試nginx lighthttp iis等其它web伺服器的壓力。apache附帶的ab工具 使用的php環境是wamp整合環境,ab工具位於d wamp bin apache apache2.2.21 bin 非...

使用apache的ab命令進行壓測

環境盡量和線上保持一致 ngixn版本,php版本,網路大小,在測試高併發的時候要修改測試機的最大訪問量ulimit n,ab是單執行緒程式,只能利用單一cpu,在給效能好的伺服器端應用做壓測時,往往跑ab的測試機負荷滿了 而伺服器應用的效能還綽綽有餘。yum y install httpd too...