Apache ab壓力測試工具Window下載和用法詳解
ab是apache自帶的網站壓力測試工具。
使用起來非常的簡單和方便。
不僅僅是可以apache伺服器進行網站訪問壓力測試,還可以對其他型別的伺服器進行壓力測試。
比如nginx,tomcat,IIS等
首先當然是下載安裝了。
在這裡只講window下在下載安裝
官方下載地址:,(https://www.apachehaus.com/cgi-bin/download.plx)
下載完成後解壓
我就直接解壓到d盤的apacheab中去了
修改解壓根目錄下的conf/httpd.conf檔案的埠配置,預設是80埠,應該是被佔用了,無法安裝,可以自行修改為其他,我在這裡修改為8088埠
然後輸入命令安裝:
httpd -k install
第一次安裝錯誤是因為埠沒有改,被佔用了,應該是被iis佔用的。
開始測試
ab -n 100 -c 10 http://www.baidu.com/s
-n 表示請求數,-c 表示併發數.
s為path,表示指定測試地址,不指定可能會報”ab: invalid url” 錯誤.
另外還有-t 表示多少s內併發和請求
測試出來的資料如下:
D:\apacheab\Apache24\bin>ab -n 100 -c 10 http://www.baidu.com/s This is ApacheBench, Version 2.3 <$Revision: 1807734 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.baidu.com (be patient).....done Server Software: BWS/1.1 ##伺服器軟體和版本 Server Hostname: www.baidu.com ##請求的地址/域名 Server Port: 80 ##埠 Document Path: /s ##請求的路徑 Document Length: 112435 bytes ##頁面資料/返回的資料量 Concurrency Level: 10 ##併發數 Time taken for tests: 4.764 seconds ##共使用了多少時間 Complete requests: 100 ##請求數 Failed requests: 99 ##失敗請求 百度為什麼失敗這麼多,應該是百度做了防範 (Connect: 0, Receive: 0, Length: 99, Exceptions: 0) Total transferred: 11342771 bytes ##總共傳輸位元組數,包含http的頭資訊等 HTML transferred: 11247622 bytes ##html位元組數,實際的頁面傳遞位元組數 Requests per second: 20.99 [#/sec] (mean) ##每秒多少請求,這個是非常重要的引數數值,伺服器的吞吐量 Time per request: 476.427 [ms] (mean) ##使用者平均請求等待時間 Time per request: 47.643 [ms] (mean, across all concurrent requests) ##伺服器平均處理時間,也就是伺服器吞吐量的倒數 Transfer rate: 2325.00 [Kbytes/sec] received ##每秒獲取的資料長度 Connection Times (ms) min mean[+/-sd] median max Connect: 22 41 12.4 39 82 ##連線的最小時間,平均值,中值,最大值 Processing: 113 386 211.1 330 1246 ##處理時間 Waiting: 25 80 43.9 73 266 ##等待時間 Total: 152 427 210.1 373 1283 ##合計時間 Percentage of the requests served within a certain time (ms) 50% 373 ## 50%的請求在373ms內返回 66% 400 ## 60%的請求在400ms內返回 75% 426 80% 465 90% 761 95% 930 98% 1192 99% 1283 100% 1283 (longest request) ---------------------
因為ab工具消耗小,所以有些人也用來進行ddos攻擊,算一種ddos攻擊工具
問題1:apr_socket_recv: Connection timed out (110)
問題分析:從ab.c原始碼可以看到,如果沒有設定-r引數,ab在socket接收到錯誤後,apr_err會使用exit即刻退出。
解決方案:ab使用時加上-r引數,如:ab -r -n200000 -c10000 http://xxxx
附ab.c的部分原始碼(apache/support/ab.c,apache版本不同,這裡的原始碼行數可能不同)
1398 if (recverrok) {
1399 bad++;
1400 close_connection©;
1401 if (verbosity >= 1) {
1402 char buf[120];
1403 fprintf(stderr,"%s: %s (%d)\n", “apr_socket_recv”, apr_strerror(status, buf, sizeof bu f), status);
1404 }
1405 return;
1406 } else {
1407 apr_err(“apr_socket_recv”, status);
1408 }
問題2:apr_socket_recv: Connection reset by peer (104)
解決方案同問題1,在遇到錯誤時,加-r引數,避免即刻退出
問題3:apr_pollset_poll: The timeout specified has expired (70007)
問題分析:從ab.c原始碼可以看到,在socket等待server的響應超過超時時間(-s可指定,未指定預設30s),則呼叫apr_err退出。
解決方案:找到如下(1758,1759)兩行程式碼,註釋掉,重新編譯apache/support目錄(可單獨support,無需重新編譯apache)
1755 do {
1756 status = apr_pollset_poll(readbits, aprtimeout, &n, &pollresults);
1757 } while (APR_STATUS_IS_EINTR(status));
1758 if (status != APR_SUCCESS)
1759 apr_err(“apr_pollset_poll”, status);
問題四:
使用apache ab做壓力測試時出現apr_poll:The timeout specified has expired錯誤
使用apache 的ab做壓力測試時,當壓力過大,例如請求1000000次,在沒有執行完就報apr_poll:The timeout specified has expired錯誤,解決辦法,使用-k(傳送keep-alive指令到伺服器端),同時修改web伺服器下的/etc/sysctl.conf,在裡 面新增如下內容:
net.ipv4.netfilter.ip_conntrack_max = 3276800
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_orphan_retries = 1
net.ipv4.tcp_fin_timeout = 25
net.ipv4.tcp_max_orphans = 8192
net.ipv4.ip_local_port_range = 32768 61000
如果已經存在,試著加大net.ipv4.netfilter.ip_conntrack_max的值,然後使用
sysctl -p /etc/sysctl.conf
原文連結:https://blog.csdn.net/qq_26525215/article/details/79182674