一、相關(guān)概念
與壓力測試有關(guān)的概念:
- 吞吐率(Requests per second)
概念:服務(wù)器并發(fā)處理能力的量化描述,單位是 reqs/s,指的是某個并發(fā)用戶數(shù)下單位時間內(nèi)處理的請求數(shù)。某個并發(fā)用戶數(shù)下單位時間內(nèi)能處理的最大請求數(shù),稱之為最大吞吐率。
計算公式:總請求數(shù) / 處理完成這些請求數(shù)所花費的時間,即
每秒請求數(shù) = 完成請求數(shù) / 測試時間。
- 并發(fā)連接數(shù)(并發(fā)連接數(shù))
概念:某個時刻服務(wù)器所接受的請求數(shù)目,簡單的講,就是一個會話。
- 并發(fā)用戶數(shù)(并發(fā)用戶數(shù),并發(fā)級別)
概念:要注意區(qū)分這個概念和并發(fā)連接數(shù)之間的區(qū)別,一個用戶可能同時會產(chǎn)生多個會話,也即連接數(shù)。
- 用戶平均請求等待時間(每個請求的時間)
計算公式:處理完成所有請求數(shù)所花費的時間 /(總請求數(shù) / 并發(fā)用戶數(shù)),即
每個請求的時間 = 測試所花費的時間 /(完整請求 / 并發(fā)級別)。
- 服務(wù)器平均請求等待時間(每個請求的時間:跨所有并發(fā)請求)
計算公式:處理完成所有請求數(shù)所花費的時間 / 總請求數(shù),即所花費的時間 / testsComplete 請求。
可以看到,它是吞吐率的倒數(shù)。
同時,它也 = 用戶平均請求等待時間 / 并發(fā)用戶數(shù),即
每個請求的時間 / 并發(fā)級別。
二、什么是 Apache Bench
官網(wǎng)地址:ab - Apache HTTP server benchmarking tool
ab - Apache HTTP 服務(wù)器性能基準(zhǔn)工具。
AB 是 Apache 的超文本傳輸協(xié)議(HTTP)的性能測試工具。其設(shè)計意圖是描繪當(dāng)前所安裝的的 Apache 的執(zhí)行性能,主要是顯示你安裝的 Apache 的每秒可以處理多少個請求。
AB 是 Apache 自帶的壓力測試工具。ab 非常實用,它不僅可以對 Apache 服務(wù)器進行網(wǎng)站訪問壓力測試,也可以對或其它類型的服務(wù)器進行壓力測試。比如 nginx、tomcat、IIS 等。
ab 是一種用于測試 Apache 超文本傳輸協(xié)議(HTTP)服務(wù)器的工具。apache 自帶 ab 工具,可以測試
apache、IIs、tomcat、nginx 等服務(wù)器。但是 ab 沒有 Jmeter、Loadrunner 那樣有各種場景設(shè)計、各種圖形報告和監(jiān)控,只需一個命令即可,有輸出描述,可以簡單的進行一些壓力測試。
總的來說 ab 工具 ab 小巧簡單,上手學(xué)習(xí)較快,可以提供需要的基本性能指標(biāo),但是沒有圖形化結(jié)果,不能監(jiān)控。因此 ab 工具可以用作臨時緊急任務(wù)和簡單測試。
同類型的壓力測試工具還有:webbench、siege、http_load 等
三、使用
查看 Apache 版本
Mac 系統(tǒng)下自帶 Apache,可以使用 apachectl -v 命令查看 Apache 版本:
$ apachectl -v
Server version: Apache/2.4.34 (Unix)
Server built: Aug 17 2018 18:35:43
查看 ab 版本
$ ab -V # 注意到,這里是大寫的V
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
查看當(dāng)前系統(tǒng)的默認(rèn)文件打開數(shù):
ulimit -a
-t: cpu time (seconds) unlimited
-f: file size (blocks) unlimited
-d: data seg size (kbytes) unlimited
-s: stack size (kbytes) 8192
-c: core file size (blocks) 0
-v: address space (kbytes) unlimited
-l: locked-in-memory size (kbytes) unlimited
-u: processes 1418
-n: file descriptors 4864
設(shè)置打開文件數(shù)限制為 2048:
ulimit -n 2048
測試命令
命令行參數(shù) | 說明 |
---|---|
-n | 請求次數(shù) |
-c | 并發(fā)數(shù) |
-r | 當(dāng)接收到錯誤時,不要退出套接字(socket) |
錯誤問題:apr_socket_connect(): Operation already in progress (37)
這一個問題解決就是
ulimit -u 5000(16GB內(nèi)存)
ulimit -u 2030(8G內(nèi)存)
錯誤問題: apr_socket_recv: Connection reset by peer (54)
這個報錯一般是由于使用的 MacOSX 默認(rèn)自帶的 ab 限制了并發(fā)數(shù)導(dǎo)致的。
解決辦法:下載最新的 apache 并重新編譯,備份原來的 ab 并將新編譯的 ab 替換到原來的路徑
錯誤問題: apr_socket_recv: Connection Time out(60)&&socket: Too many open files (24)
這個的話就先更改最大文件限制
ulimit -n (查看是多少)
ulimit -n number(填數(shù)字設(shè)置最大值)
ab 壓測試時再添加上-s (你的需要的數(shù)字ms) 即可以解決timeout的問題
ab -s 1000 -r -k -n 10000 -c 500 -p Desktop/postab.txt -T 'application/json' "url"
以上內(nèi)容大部分轉(zhuǎn)自http://www.lxweimin.com/p/14ed545ccf56,因為大同小異所以筆者沒有自己寫.錯誤問題可以看看,然后分享一個重裝ab的連接http://www.lxweimin.com/p/2fe5b906feb1