ab壓測


簡介

  • 做測試或者服務端開發的同學經常想要知道我們的后台服務能同時承載多少用戶量,通過模擬實際應用的軟硬件環境及用戶使用過程的系統負荷,長時間或超大負荷地運行測試軟件,來測試被測系統的性能、可靠性、穩定性等。壓力測試需要確定一個系統的瓶頸或者不能接收的性能點,來獲得系統能提供的最大的服務級別。通俗地講,壓力測試是為了發現在什么條件下您的應用程序的性能會變得不可接受。這是就需要用到一些壓測工具來對服務器進行並發壓力測試。常見的壓力測試工具有Jmeter,LoadRunner,ab等等,一般來說做壓力測試,建議使用Jmeter或者LoadRunner,但是簡單場景的壓測使用ab就很方便快捷,還可以在linux服務器上進行,可以與其他壓測工具做下對比。

本文將介紹如何使用ab對服務器進行壓力測試,內容有

  • ab工具的安裝
  • 壓測命令的用法
  • 壓測簡單示例
  • 壓測結果分析

1、ab工具的安裝

  • 介紹

    ab是apachebench命令的縮寫,ab命令會創建多個並發訪問線程,模擬多個訪問者同時對某一HTTP URL地址進行訪問。

    ab命令對發出負載的計算機要求很低,它既不會占用很高CPU,也不會占用很多內存。但卻會給目標服務器造成巨大的負載,其原理類似CC攻擊。自己測試使用也需要注意,否則一次上太多的負載。可能造成目標服務器資源耗完,嚴重時甚至導致死機。

  • 安裝

yum -y install httpd-tools
  • 查看版本
ab -V

2、壓測命令的用法

  • 參數解析:
-n 測試會話中所執行的請求個數,默認僅執行一個請求,如果不指定-t參數,默認執行完所有請求后自動結束壓測 -c 一次產生的請求個數,即同一時間發出多少個請求,默認為一次一個,此參數可以控制對服務器的單位時間內的並發量 -t 測試所進行的最大秒數,默認為無時間限制....其內部隱含值是[-n 50000],它可以使對服務器的測試限制在一個固定的總時間以內,如果時間到了,請求個數還未執行完,也會被停止。 -p 包含了需要POST的數據的文件,數據格式以接口請求參數定義的格式為准,eg. xxx.json #json 內容示例: {"name":"小明","sex":"男"} -T POST 數據所使用的Content-type頭信息,指定請求參數格式,eg. application/json -r 在接口返回失敗后,默認會終止壓測,添加此參數后壓測會繼續進行 -v 設置顯示信息的詳細程度 -w 以HTML表格的形式輸出結果,默認是白色背景的兩列寬度的一張表 -i 以HTML表格的形式輸出結果,默認是白色背景的兩列寬度的一張表 -x 設置屬性的字符串,此屬性被填入[/table] -y 設置屬性的字符串 -z 設置[table]屬性的字符串 -C 對請求附加一個Cookie行,其典型形式是name=value的參數對,此參數可以重復 -H 對請求附加額外的頭信息,此參數的典型形式是一個有效的頭信息行,其中包含了以冒號分隔的字段和值的對(如"Accept-Encoding:zip/zop;8bit") -A HTTP驗證,用冒號:分隔傳遞用戶名及密碼 -P 無論服務器是否需要(即是否發送了401認證需求代碼),此字符串都會被發送 -X 對請求使用代理服務器 -V 顯示版本號並退出 -k 啟用HTTP KeepAlive(長連接)功能,即在一個HTTP會話中執行多個請求,默認為不啟用KeepAlive功能 -d 不顯示"percentage served within XX [ms] table"的消息(為以前的版本提供支持) -S 不顯示中值和標准背離值,且均值和中值為標准背離值的1到2倍時,也不顯示警告或出錯信息,默認會顯示最小值/均值/最大值等(為以前的版本提供支持) -g 把所有測試結果寫入一個'gnuplot'或者TSV(以Tab分隔的)文件 -e 產生一個以逗號分隔的(CSV)文件,其中包含了處理每個相應百分比的請求所需要(從1%到100%)的相應百分比的(以微秒為單位)時間 -h 顯示使用方法 -k 發送keep-alive指令到服務器端
  • 一般用法

對某接口進行壓力測試:

ab -n 1000000 -c 200 -r "http://localhost:8080/helloworld?name=小明"

以每秒200個請求的速度對此接口進行訪問,知道請求數達到1000000個為止,忽略接口返回的錯誤信息

3、壓測簡單示例

  • 對get請求進行壓測(一些頁面和圖片資源的訪問也可以用這種方式)
#請求接口 ab -n 1000000 -c 200 -r "http://localhost:8080/helloworld?name=小明" #獲取圖片 ab -n 1000000 -c 200 -r "http://localhost:8080/static/test.png" #獲取頁面 ab -n 1000000 -c 200 -r "http://localhost:8080/index.html"
  • 對post請求進行壓測
#壓測命令 ab -n 1000000 -c 1000 -r -p data.json -T 'application/json' "http://localhost:8080/public/regist"
#編輯請求數據 # vi data.json { "account":"128983321", "nickname":"小明", "sex":"男", "age":22, "password":"DFKJDFJDLSDKSKL&%DFSD" }

注意:如果想在請求失敗后結束壓測,可以去掉-r參數

4、壓測結果分析

  • 壓測命令

    ab -n 10000 -c 1000 -r "http://127.0.0.1:8080/helloworld?name=小明"
  • 壓測結果

    This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 172.25.0.248 (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: Server Hostname: 127.0.0.1 #請求的URL主機名 Server Port: 8080 #請求端口 Document Path: /helloworld?name=小明 #請求路徑 Document Length: 29 bytes #HTTP響應數據的正文長度 Concurrency Level: 1000 #並發用戶數,這是我們設置的參數之一(-c) Time taken for tests: 129.957 seconds #所有這些請求被處理完成所花費的總時間 單位秒 Complete requests: 10000 #總請求數量,這是我們設置的參數之一(-n) Failed requests: 0 #表示失敗的請求數量 Write errors: 0 #所有請求的響應數據長度總和。包括每個HTTP響應數據的頭信息和正文數據的長度 Total transferred: 1500000 bytes #所有請求的響應數據中正文數據的總和,也就是減去了Total transferred中HTTP響應數據中的頭信息的長度 HTML transferred: 290000 bytes #吞吐量,計算公式:Complete requests/Time taken for tests 總請求數/處理完成這些請求數所花費的時間 Requests per second: 76.95 [#/sec] (mean) #用戶平均請求等待時間,計算公式:Time token for tests/(Complete requests/Concurrency Level)。處理完成所有請求數所花費的時間/(總請求數/並發用戶數) Time per request: 12995.680 [ms] (mean) #用戶平均請求等待時間,計算公式:Time token for tests/(Complete requests/Concurrency Level)。處理完成所有請求數所花費的時間/(總請求數/並發用戶數) Time per request: 12.996 [ms] (mean, across all concurrent requests) #服務器平均請求等待時間,計算公式:Time taken for tests/Complete requests,正好是吞吐率的倒數。也可以這么統計:Time per request/Concurrency Level Transfer rate: 11.27 [Kbytes/sec] received #表示這些請求在單位時間內從服務器獲取的數據長度,計算公式:Total trnasferred/ Time taken for tests,這個統計很好的說明服務器的處理能力達到極限時,其出口寬帶的需求量。 Connection Times (ms) min mean[+/-sd] median max Connect: 0 24 150.7 0 1003 Processing: 73 12348 2207.1 12966 13916 Waiting: 53 12348 2207.1 12966 13916 Total: 73 12373 2199.0 12968 14023 Percentage of the requests served within a certain time (ms) 50% 12968 #50%的請求在13秒內返回 66% 13005 75% 13031 80% 13049 90% 13109 95% 13173 98% 13260 99% 13350 #99%的請求在13.4秒內返回 100% 14023 (longest request)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM