無意中發現了這個工具”http_load”,又輕巧又簡便,整個安裝包就10幾K。它可以快速用來對網站或者Web API進行壓力測試。而且功能還挺強大的,特別是在架構驗證過程中,測試某個平台的並發和響應時間相當的管用。
安裝http_load
我們直接從官網上下載壓縮包安裝。
$ wget http://acme.com/software/http_load/http_load-09Mar2016.tar.gz
$ tar xfz http_load-09Mar2016.tar.gz
解壓完用”make”安裝。
$ cd http_load-09Mar2016/
$ make && sudo make install
因為包小,所以瞬間安裝完。直接打http_load
命令驗證下是否安裝成功,你應該可以看到下面的信息:
usage: http_load [-checksum] [-throttle] [-proxy host:port] [-verbose] [-timeout secs] [-sip sip_file]
-parallel N | -rate N [-jitter]
-fetches N | -seconds N
url_file
One start specifier, either -parallel or -rate, is required.
One end specifier, either -fetches or -seconds, is required.
接下來就讓我們用一下這個工具。
命令格式
使用”http_load”的主要方式就是用命令http_load <參數> <url列表文件>
。其中”url列表文件”就是一個文本文件,每行放一條你要測試的URL地址(默認只支持HTTP),”http_load”在運行時會從中隨機抽取地址訪問。當然你也可以只放一條,那就是針對特定地址做壓測。
“http_load”的參數主要有:
-parallel
簡寫-p
: 同一時間發起的並發連接數-rate
簡寫-r
: 每秒開啟的並發連接數
-parallel
或-rate
必須且只能有一個
-fetches
簡寫-f
:總計的訪問次數-seconds
簡寫-s
:總計的訪問時間
-fetches
或-seconds
必須且只能有一個
-proxy host:port
: 指定需經過的代理地址和端口timeout secs
: 連接閑置后多久超時,默認60秒-verbose
: 控制台輸出詳細信息
注意網上有些文章說-p
是並發進程數,千萬別被帶坑里了。”http_load”就一個進程,它只是模擬並發連接,不是真起了一大堆客戶端進程。每個連接的調用都是非阻塞式的,因此確保了並發量。
使用示例
我拿本地的Hugo Server來測試,訪問地址是http://localhost:1313/
。首先創建”urls.txt”文件,將Hugo Server的訪問地址寫在第一行。接下來開始測試:
-
起50個並發,運行10秒
$ http_load -p 50 -s 10 urls.txt
得到結果
60119 fetches, 50 max parallel, 1.8471e+09 bytes, in 10.0032 seconds
30724 mean bytes/connection
6009.95 fetches/sec, 1.8465e+08 bytes/sec
msecs/connect: 0.336331 mean, 12.37 max, 0.021 min
msecs/first-response: 4.59145 mean, 26.663 max, 0.089 min
HTTP response codes:
code 200 -- 60119
簡單說明下每行的含義: 1. 共訪問了60119次,50個最大並發,獲取了18億字節的數據,用時10.0032秒 1. 每次訪問平均獲取30724字節 1. 每秒6009.95次訪問,每秒1.8億字節數據 1. 平均每次訪問0.336331毫秒,最大12.37毫秒,最小0.021毫秒 1. 首次響應平均4.59145毫秒,最大26.663毫秒,最小0.089毫秒 1. HTTP響應代碼,60119次200,說明所有訪問都成功了
到底是本地訪問,性能還不錯。換一個測試方式試試:
-
每秒訪問1000次(http_load上限每秒1000),總共訪問10000次
http_load -r 1000 -f 10000 urls.txt
這個測試方式可以用來壓每秒最大並發數。