天天看點

MACOSX Apache ab壓力測試

MACOSX Apache ab壓力測試

@Date 2018.12.24

一. 介紹

  • ab是apachebench指令的縮寫, 預設mac下都已經安裝了, 但是預設版本會有幾個問題, 故寫此文章進行總結

二. 問題

1. apr_socket_recv: Connection reset by peer (xx)
  • 原因 : 此問題是apache的bug, 在高版本上已經解決, 故我們需要在mac上更新ab的版本
  • 解決 :
    1. 現在較高版本的apache, 下載下傳位址( http://mirrors.hust.edu.cn/apache//httpd/httpd-2.4.34.tar.gz)
    2. 現在apache依賴的包,分别如下
      1. APR : http://mirrors.shu.edu.cn/apache//apr/apr-1.6.5.tar.gz
      2. APR-Util : http://mirrors.shu.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
      3. pcre : https://ftp.pcre.org/pub/pcre/pcre-8.00.tar.gz
    3. 安裝(prefix是指向想要安裝的路徑)
        • 下載下傳的APR壓縮包解壓縮, 進入APR目錄
        • 執行 ./configure –prefix=/usr/local/apr
        • 使用sudo權限執行 make
        • 使用sudo權限執行 make install
      1. APR-Util
        • 同樣進入解壓後的apr-util目錄
        • 執行 ./configure –prefix=/usr/local/apr-util -with-apr=/usr/local/apr/ (此指令依賴apr)
      2. pcre
        • 同樣進入解壓後的pcre目錄
        • 執行 ./configure –prefix=/usr/local/pcre
      3. 安裝ab
        • 進入解壓後的httpd-2.3.34目錄
        • sudo權限建立/usr/local/httpd/目錄
        • 依賴上面安裝好的各種包, 執行以下指令 ./configure –prefix=/usr/local/httpd/ -with-apr=/usr/local/apr -with-apr-util=/usr/local/apr-util/ -with-pcre=/usr/local/pcre/
    4. 替換Mac預設的ab
      1. 在上述3.4中, httpd目錄下. 執行以下指令 sudo cp support/ab /usr/sbin .将編譯後的最新ab指令copy到系統中.
      2. 此時會遇到最新MacOSX中權限問題, 請看下文[權限異常 Operation not permitted]()
2. apr_poll: The timeout specified has expired (70007)
  • 原因 : 高版本的ab需要增加-s參數, 執行逾時時間, 否則會30s則逾時
    • ab --help 查詢指令幫助
    • -s timeout 使用ab指令時,增加-s參數
3. MacOSX中/usr/sbin報錯, Operation not permitted
  • 原因 : 系統增加了Rootless機制機制,防止惡意程式執行高權限指令
    • 重新開機Mac系統, 在重新開機過程中一直按住Command+R, 進入恢複模式.
    • 在恢複模式中無需點選其它操作, 在菜單欄中打開Terminal, 執行以下指令 csrutil disable. 解鎖dtrace限制

三. ab指令使用

1. 參數詳解
# 顯示用法資訊,其實就是ab -help
-h

# 列印版本号并退出
-V

# 即requests,用于指定壓力測試總共的執行次數
-n

# 即concurrency,用于指定壓力測試的并發數
-c

# 即timelimit,等待響應的最大時間(機關:秒)
-t

# 即windowsize,TCP發送/接收的緩沖大小(機關:位元組)
-b

# 即postfile,發送POST請求時需要上傳的檔案,此外還必須設定-T參數
-p

# 即putfile,發送PUT請求時需要上傳的檔案,此外還必須設定-T參數
-u

# 即content-type,用于設定Content-Type請求頭資訊,例如:application/x-www-form-urlencoded,預設值為text/plain
-T

# 即verbosity,指定列印幫助資訊的備援級别
-v

# 以HTML表格形式列印結果
-w

# 使用HEAD請求代替GET請求
-i

# 插入字元串作為table标簽的屬性
-x

# 插入字元串作為tr标簽的屬性
-y

# 插入字元串作為td标簽的屬性
-z

# 添加cookie資訊,例如:"key=value"(可以重複該參數選項以添加多個)
-C

# 添加任意的請求頭HEADER,請求頭将會添加在現有的多個請求頭之後(可以重複該參數選項以添加多個)
-H

# 添加一個基本的網絡認證資訊,使用者名和密碼之間用英文冒号隔開
-A

# 添加一個基本的代理認證資訊,使用者名和密碼之間用英文冒号隔開
-P

# 指定使用的代理伺服器和端口号
-X

# 使用HTTP的KeepAlive特性
-k

# 不顯示百分比
-d

# 不顯示預估和警告資訊
-S

# 輸出結果資訊到gnuplot格式的檔案中
-g

# 輸出結果資訊到CSV格式的檔案中
-e

# 指定接收到錯誤資訊時不退出程式
-r