1. 程式人生 > >Apache ab壓力測試工具Window下載和用法詳解

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