在此提供 ab 在 centOS7 下的安裝和使用方法
注:我的發現,以前安裝的centos6.5 默認已安裝了ab,具體緣由不明html
yum -y install httpd httpd-tools前端
命令: ab 或 ab -help
顯示命令參數以下nginx
ab [可選的參數選項] 須要進行壓力測試的url
參數說明:
此外,咱們再根據上面的用法介紹界面來詳細瞭解每一個參數選項的做用。apache
-n 即requests,用於指定壓力測試總共的執行次數。
-c 即concurrency,用於指定的併發數。
-t 即timelimit,等待響應的最大時間(單位:秒)。
-b 即windowsize,TCP發送/接收的緩衝大小(單位:字節)。
-p 即postfile,發送POST請求時須要上傳的文件,此外還必須設置-T參數。
-u 即putfile,發送PUT請求時須要上傳的文件,此外還必須設置-T參數。
-T 即content-type,用於設置Content-Type請求頭信息,例如:application/x-www-form-urlencoded,默認值爲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特性。
-d 不顯示百分比。
-S 不顯示預估和警告信息。
-g 輸出結果信息到gnuplot格式的文件中。
-e 輸出結果信息到CSV格式的文件中。
-r 指定接收到錯誤信息時不退出程序。
-h 顯示用法信息,其實就是ab -help。windows
模擬併發請求100次,總共請求10000次
命令模板:
ab -c 100 -n 10000 待測試網站(建議完整路徑)
內容解釋:
Server Software: nginx/1.10.2 (服務器軟件名稱及版本信息)
Server Hostname: 192.168.1.106(服務器主機名)
Server Port: 80 (服務器端口)
Document Path: /index1.html. (供測試的URL路徑)
Document Length: 3721 bytes (供測試的URL返回的文檔大小)
Concurrency Level: 1000 (併發數)
Time taken for tests: 2.327 seconds (壓力測試消耗的總時間)
Complete requests: 5000 (的總次數)
Failed requests: 688 (失敗的請求數)
Write errors: 0 (網絡鏈接寫入錯誤數)
Total transferred: 17402975 bytes (傳輸的總數據量)
HTML transferred: 16275725 bytes (HTML文檔的總數據量)
Requests per second: 2148.98 [#/sec] (mean) (平均每秒的請求數) 這個是很是重要的參數數值,服務器的吞吐量
Time per request: 465.338 [ms] (mean) (全部併發用戶(這裏是1000)都請求一次的平均時間)
Time request: 0.247 [ms] (mean, across all concurrent requests) (單個用戶請求一次的平均時間)
Transfer rate: 7304.41 [Kbytes/sec] received 每秒獲取的數據長度 (傳輸速率,單位:KB/s)
...
centos
【測試一】:
命令 ab -c 100 -n 5000 http://192.168.1.106/index1.html服務器
【測試二】:
命令 ab -c 10000 -n 50000 http://192.168.1.106/index1.htmlcookie
簡單解釋:併發訪問量過大 服務器拒絕訪問,理論上經過系統配置,能夠有更好的承受能力網絡
測試機與被測試機要分開
不要對線上的服務器作壓力測試
觀察測試工具ab所在機器,以及被測試的前端機的CPU、內存、網絡等都不超過最高限度的75%
ab請加-k參考啓用http1.1的keepalive功能併發
ab是如何分配併發和請求數的呢? 在test函數中,先給鏈接數和請求數分配內存,組http報文頭、組http請求報文默認使用GET方法(最大2048個字節) 進入for循環 for (i = 0; i < concurrency; i++) { con[i].socknum = i; start_connect(&con[i]); } start_connect函數裏,concurrency有幾個併發,就建立幾個socket鏈接 apr_socket_create 設置TCP窗口大小 apr_socket_connect started++ 打開的併發數加加 進入write_request函數 apr_socket_send 把request裏的內容經過socket發過去最大2048個字節 發送數據是一個字節一個字節發的嗎? 一個併發建立完成及一次請求發送後,出上一個for循環進入一個do while循環 這個do while循環裏面又有一個for循環 for (i = 0; i < n; i++) n爲併發數 進入read_connection函數 apr_socket_recv 進入close_connection函數 統計一些成功失敗數量 平均時間,到必定數量會顯示"Completed XXXX requests" apr_socket_close 而後connect again,再次調用start_connect函數建立socket鏈接,再write_request,循環n次 而後return ===================================
1)
ab併發數不能大於請求數,會提示
ab: Cannot use concurrency level greater than total number of requests
2)
請求數默認不能超過1024個,會提示
socket: Too many open files (24)
可用ulimit -n命令修改,例如:ulimit -n 8192 (設置用戶能夠同時打開的最大文件數)。
3)
併發數默認不能大於20000個,會提示
ab: Invalid Concurrency [Range 0..20000]
須要修改apache源代碼support目錄下ab.c文件,找到:
#define MAX_CONCURRENCY 20000
將宏定義的值改大,從新編譯安裝apache。
4)
提示
apr_socket_recv: Connection reset by peer (104)
網上說是apr-util有些問題,不太穩定,多試幾回就行了。
5)
還有單獨的apache bench源碼包,及如何單獨安裝ab教程
下載:http://apachebench-standalone.googlecode.com/files/ab-standalone-0.1.tar.bz2
安裝教程:https://code.google.com/p/apachebench-standalone/wiki/HowToBuild
6)測試時發現有以下錯誤
... Failed requests: 998 (Connect: 0, Receive: 0, Length: 998, Exceptions: 0) ...
7) ab怎麼post數據 ?
sudo ./ab -c 10 -n 100 -p ./post.file -T 'application/x-www-form-urlencoded' http://www.abc.cn/test
post.file內容:
aa=bb&cc=dd