ab
ab是apache自帶的壓力測(cè)試工具,使用起來非常方便.
安裝
如果安裝了apache, 那么ab已經(jīng)安裝好了,如果不想安裝apache的話,可以通過以下方式安裝ab
# ubuntu
sudo apt-get install apache2-utils
# centos
yum -y install httpd-tools
壓測(cè)
在壓測(cè)前,需要關(guān)注幾個(gè)選項(xiàng),通過 ab -help 查看
Options are:
-n requests 要執(zhí)行的請(qǐng)求次數(shù)
-c concurrency 并發(fā)數(shù)量
-s timeout 響應(yīng)時(shí)間
執(zhí)行
ab -n 1000 -c 100 -s 1 http://127.0.0.1:1080/event?config_name=mysql_config
# 總共100個(gè)并發(fā)執(zhí)行1000此請(qǐng)求,超時(shí)時(shí)間為1s
結(jié)果分析
在執(zhí)行上述測(cè)試命令后,得到如下結(jié)果,主要關(guān)注以下幾個(gè)指標(biāo):
- Failed requests:失敗的請(qǐng)求
- Requests per second:也就是常說的QPS, 每秒查詢率,這是一個(gè)平均值
- Time per request:完成一個(gè)請(qǐng)求所花費(fèi)的時(shí)間
- Transfer rate: 網(wǎng)絡(luò)傳輸速度。 對(duì)于大文件的請(qǐng)求測(cè)試,這個(gè)值很容易成為系統(tǒng)瓶頸所在 要確定該值是不是瓶頸,需要了解客戶端和被測(cè)服務(wù)器之間的網(wǎng)絡(luò)情況,包括網(wǎng)絡(luò)帶寬和網(wǎng)卡速度等信息。
Server Software:
Server Hostname: 127.0.0.1
Server Port: 1080
Document Path: /event?config_name=mysql_config
Document Length: 0 bytes
Concurrency Level: 100
Time taken for tests: 0.137 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 75000 bytes
HTML transferred: 0 bytes
Requests per second: 7275.11 [#/sec] (mean)
Time per request: 13.745 [ms] (mean)
Time per request: 0.137 [ms] (mean, across all concurrent requests)
Transfer rate: 532.84 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 1.0 1 5
Processing: 1 12 5.9 11 30
Waiting: 1 11 5.9 11 29
Total: 1 13 6.1 13 30
Percentage of the requests served within a certain time (ms)
50% 13
66% 15
75% 17
80% 18
90% 22
95% 25
98% 28
99% 29
100% 30 (longest request)
wrk
wrk 是一款c語言開發(fā)的現(xiàn)代的http性能基準(zhǔn)測(cè)試工具,使用簡(jiǎn)單,功能強(qiáng)大。
安裝
安裝可以從github上下載源碼編譯安裝 wrk github地址
壓測(cè)
wrk的命令選項(xiàng)并不多,很容易使用
Usage: wrk <options> <url>
Options:
-c, --connections <N> 建立的連接
-d, --duration <T> 執(zhí)行測(cè)試時(shí)間
-t, --threads <N> 線程數(shù)量
-s, --script <S> 使用lua腳本(非常強(qiáng)大的功能,有興趣可以深入研究)
-H, --header <H> 為每一個(gè)HTTP請(qǐng)求添加HTTP頭
--latency 在壓測(cè)結(jié)束后,打印延遲統(tǒng)計(jì)信息
--timeout <T> 超時(shí)時(shí)間
-v, --version Print version details
Numeric arguments may include a SI unit (1k, 1M, 1G)
Time arguments may include a time unit (2s, 2m, 2h)
wrk -c100 -t10 -d30s http://127.0.0.1:1080/event?config_name=mysql_config
# 10個(gè)線程100個(gè)連接壓測(cè)30s
結(jié)果分析
wrk生成的結(jié)果報(bào)告比較簡(jiǎn)潔,主要關(guān)注的點(diǎn)和ab差不多
- Requests/sec: QPS
- Transfer/sec: 網(wǎng)絡(luò)傳輸速度
Running 30s test @ http://127.0.0.1:1080/event?config_name=mysql_config
10 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 21.02ms 92.04ms 1.05s 97.79%
Req/Sec 1.22k 229.72 2.38k 75.47%
365483 requests in 30.07s, 26.14MB read
Requests/sec: 12152.63
Transfer/sec: 0.87MB
jmeter
jmeter 是由java編寫的一個(gè)GUI測(cè)試工具,功能強(qiáng)大且結(jié)果多樣
安裝
安裝可以去 apache jmeter 下載
使用
建立 Plan
建立Thread Group
建立好 Plan后就可以建立 Thread Group 了, 建立方式
選中Plan 后, Edit > Add > Threads > Thread Group
Thread Group 可以設(shè)置線程的一些參數(shù),主要是 Number of Threads(users) 和 Loop Count
添加Listener
Listener主要生成一些結(jié)果報(bào)告,添加方式為
選中Thread Group后 Edit > Add > Listener
可以看到有很多結(jié)果報(bào)告,我平時(shí)主要用到以下幾個(gè)結(jié)果報(bào)告
- View Results Tree
- Aggregate Report
- Graph Results
- View Results Table
View Results Tree
這個(gè)報(bào)告會(huì)生成請(qǐng)求樹,點(diǎn)擊可以查看每個(gè)請(qǐng)求的信息
Aggregate Report
這個(gè)報(bào)告會(huì)生成請(qǐng)求的聚合統(tǒng)計(jì)信息, 主要參數(shù)就是QPS, 傳輸速度等
Graph Results
強(qiáng)大的圖形報(bào)告結(jié)果
圖形結(jié)果一些說明
- No of Samples(樣本數(shù)): 代表向服務(wù)器發(fā)送的請(qǐng)求數(shù)目
- Deviation(偏離):代表服務(wù)器相應(yīng)時(shí)間變化的數(shù)據(jù)的分布
- Latest Sample(最新樣本): 表示服務(wù)器相應(yīng)最后一個(gè)請(qǐng)求的時(shí)間
- Throughtput(吞吐率):這里是服務(wù)器每分鐘對(duì)數(shù)據(jù)的處理量
- Average(平均值): 表示總運(yùn)行的時(shí)間除以發(fā)送給服務(wù)器的請(qǐng)求數(shù)
- Median(中間值): 代表有一半的服務(wù)器時(shí)間低于該值,而另一半高于該值
根據(jù)圖形結(jié)果得到的一些分析
- 吞吐率起步的時(shí)候比較低,隨著請(qǐng)求數(shù)量越來越多,吞吐率先增后減
- 偏離值還不錯(cuò),保持一個(gè)很平穩(wěn)的狀態(tài) 如果偏離數(shù)量隨著請(qǐng)求數(shù)量越來越大, 說明服務(wù)器越來越不穩(wěn)定