1. 安裝
安裝httperf可到此處下載
如果是ubuntu可以使用下列指令安裝
sudo apt-get install httperf
安裝autobench
可到此處下載
如果是debian或者ubuntu,可以直接下載deb安裝
sudo dpkg -i autobench_2.1.2_i386.deb
2. 設定
在執行autobench的帳號下設定~/.autobench.conf
範例
low_rate = 10 #從concurrent 10的connection開始
high_rate = 100 #最高到達concurrent 100個connection
rate_step = 10 #每次增加10個connection
const_test_time = 10 #每隔10秒增加一次
num_call = 1 #測試要跑幾次
timeout = 2 #response time超過2秒算失敗
output_fmt = tsv #結果的副檔名
httperf_add-header = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 ``\n``Accept-Language: zh-tw,en-us;q=0.7,en;q=0.3 ``\n``Accept-Encoding: gzip, deflate ``\n``Accept-Charset: UTF-7,* ``\n``" #加上HTTP header
3. 使用
client端先開一視窗執行autobenchd --debug,此deamon也可以運行在另外一台機器上。client端在開另一視窗執行下列指令
autobench_admin --host1
範例
autobench_admin --host1 www.test.com --port1 1180 --uri1 /sleep.php --single_host --client test.machine.com:4600 --file result
autobench_admin --host1 www.test.com --port1 8033 --uri1 /test.htm --host2 www.test2.com --port2 8033 --uri2 /test.htm --client localhost:4600 --file result --output_fmt tsv
但最多只能支援到兩個host,沒辦法使用到--host3以後的。記得apache的maxclients要開到最大,以確保能夠測試到該機器的最大上限
4. 結果
結果的重點是倒數第3個欄位resp_time(單位為mini seconds)。其次是看最後一個欄位errors,當然前述timeout時間設的越短,errors就容易飆高。
需要看圖的話記得安裝gawk與gnuspot
執行bench2graph [source file] [target file of ps type] [....]
[...]分別代表dem_req_rate req_rate con_rate min_rep_rate avg_rep_rate max_rep_rate stddev_rep_rate resp_time net_io errors
執行bench2graph result.tsv result.ps 2 4 5 6 8 9 10 就可以轉為相對應圖片
5. 自定URI清單
若需指定測試的URI清單,可在.autobench.conf加上httperf_wlog=B,F
B 選項可以是y/n,y 表示如果到清單底部會重新從頭開始,n代表清單到底壓測結束
F 選項就是 access list 的檔案
清單斷行必須以特殊字元結尾,可用此指令轉換 perl -ne 's/\n/\0/m; print $_;' [infile] > [outfile]
6. 疑難排解
6.1 open file limit > FD_SETSIZE
若執行時發現下列錯誤
httperf: warning: open file limit > FD_SETSIZE; limiting max. # of open files to FD_SETSIZE
代表執行的帳號所設定的每個process所能開啟的檔案數量不足(預設為1024),可以使用ulimit -a指令來確認open file的欄位
需要進行下列三個步驟才能讓上限更高
1. 修改/etc/security/limits.conf,並加入類似下列設定
* hard nofile 65532
* soft nofile 65532
root hard nofile 65532
root soft nofile 65532
重開機後即可生效。對於ulimit設定若還有其他問題可見此份文件
2. 修改/usr/include/i386-linux-gnu/bits/typesizes.h的__FD_SETSIZE欄位,從 #define __FD_SETSIZE 1024 改為 #define __FD_SETSIZE 65532。原因在於httperf開檔時,c會依據/usr/include/i386-linux-gnu/sys/select.h定義的FD_SETSIZE來檢查上限是否已經到達,而此值就是從/usr/include/i386-linux-gnu/bits/typesizes.h的__FD_SETSIZE定義所來的。
ps. 如果是舊版的ubuntu,應該會是/usr/include/bits/typesizes.h的__FD_SET_SIZE欄位。如果是使用64bit環境,typesizes.h會位在/usr/include/x86_64-linux-gnu/bits/typesizes.h,欄位__FD_SETSIZE
3. 下載httperf原始檔並重新編譯安裝。如果發現還是沒有生效,可使用httperf --version確認編譯時間是否正確。如果發現時間有誤,透過whereis httperf指令檢查是否系統內還有其他httperf落在系統其他地方。其他相關的討論可見此份文件
6.2 connection failed with unexpected error
若執行時出現類似下列錯誤訊息
Zero replies received, test invalid: rate 200
httperf: connection failed with unexpected error 113
這種摸不著頭緒的錯誤訊息,可以使用下列訊息搜尋系統.h檔定義
grep 113 /usr/include/*/*errno*
可以看到以此例來說,可能是網路不通或者是web server並未開啟
/usr/include/asm-generic/errno.h:#define EHOSTUNREACH 113 /* No route to host */
7. 相關連結
httperf man doc
autobench man doc
對岸的詳細教學1
對岸的詳細教學2
對岸的詳細教學3
對岸的詳細教學4