當你使用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此外,我們再根據上面的用法介紹介面來詳細了解每個引數選項的作用。-n[可選的引數選項]
需要進行壓力測試的
url
即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...