程序压力测试、性能测试AB、Webbench、Tsung
Apache Benchmark ? ? ? ? ab命令會創建很多的并發訪問線程,模擬多個訪問者同時對某一URL進行訪問,可用來測試Apache的負載壓力,也可以測試nginx、lighthttp、IIS等其它Web服務器的壓力。 1. 安裝 Unix安裝 yum install httpd
Windows安裝 ?(下載http://jingyan.baidu.com/article/b87fe19e93a89052183568b0.html) 在安裝目錄下可以看到ab.exe( cmd 進入到次安裝目錄C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin)
2. 使用 ? ? ? ? 為了避免因為網絡原因而導致服務器壓力測試結果不準確,一般可以用ab -n 100 -c 50 http://127.0.0.1/index.php 來測試自己服務器Web性能。 所有ab命令的組成遵循此結構:???ab [options] [full path to web document]?
ab -n 1000 -c 10?http://www.qq.com/ “-n”表示:每次請求數,默認不能超過1024個,“-c”表示:1個請求的并發連接數,默認最大不能超過50000
響應描述
| 字段 | 描述 | 示 例 值 |
| Concurrency Level | 所進行的并發請求總數 | 1,2,3,…,n, 其中n為任意數字 |
| Time taken for tests | 運行所花費的總時間 | 000.000秒 |
| Complete requests | 模擬的請求總數中已 完成的請求總數 | 1,2,3,…,n, 其中n為任意數字 |
| 字段 | 描述 | 示 例 值 |
| Failed requests | 模擬的請求總數 中失敗的請求總數 | 1,2,3,?…,n, 其中n為任意數字 |
| Write errors | 使用寫入數據時 遇到的錯誤總數 | 1,2,3,?…,n, 其中n為任意數字 |
| Non-2×× responses | 未收到HTTP成功 響應的請求總數(200) | 1,2,3,…,n, 其中n為任意數字 |
| Total transferred | 整個模擬的響應中 傳輸的總數據, 大小包括標頭數據 | 725個字節 |
| HTML transferred | 整個模擬傳輸的內容 正文的總大小 | 137 199個字節 |
| Requests per second | 每秒支持的請求總數 | 5.68?[#/秒] (平均值) |
| Time per request | 滿足一個請求需要 花費的總時間 | 176.179毫秒 |
| Time per request | 滿足所有并發請求 中的一個請求需要 花費的總時間 | 176.179毫秒 |
| Transfer rate | 每秒收到的字節總數(KB) | 766.27 [KB/秒] |
HTML transferred、Requests per second以及Time per request都是關鍵字段。根據這些數據,我們能大概了解Web服務器的性能水平,這些字段使我們能夠大概了解Web服務器為一個請求返回的數據量、Web服務器一秒可以處理的請求總數以及一個請求成功地收到來自Web服務器的響應所花費的總時間 我們的目標是成功降低HTML transferred,提高Requests per second并且降低Time per request值 1、吞吐率(Requests per second) 服務器并發處理能力的量化描述,單位是reqs/s,指的是在某個并發用戶數下單位時間內處理的請求數。某個并發用戶數下單位時間內能處理的最大請求數,稱之為最大吞吐率。 記住:吞吐率是基于并發用戶數的。這句話代表了兩個含義:? a、吞吐率和并發用戶數相關? b、不同的并發用戶數下,吞吐率一般是不同的? 計算公式:總請求數/處理完成這些請求數所花費的時間,即? Request per second=Complete requests/Time taken for tests? 必須要說明的是,這個數值表示當前機器的整體性能,值越大越好。?
2、用戶平均請求等待時間(Time per request) 計算公式:處理完成所有請求數所花費的時間/(總請求數/并發用戶數),即:? Time per request=Time taken for tests/(Complete requests/Concurrency Level)?
3、服務器平均請求等待時間(Time per request:across all concurrent requests) 計算公式:處理完成所有請求數所花費的時間/總請求數,即:? Time taken for/testsComplete requests? 可以看到,它是吞吐率的倒數。? 同時,它也等于用戶平均請求等待時間/并發用戶數,即? Time per request/Concurrency Level?
最后一個部分包含一個表,其中包含Connect、Processing、Waiting以及Total字段。這些字段告訴我們請求在每個過程狀態中所需的時間。我們最感興趣的是Total字段及其最大、最小值列。這兩列提供響應一個請求所需花費的最長和最短時間的數據
可選標記
| 標記 | 描述 |
| -A?????????????????? <username>:<password> | 用于提供服務器身份驗證信息。 用戶名和密碼用“:”分隔。 發送的字符串采用base64編碼 |
| -c <concurrency? number>?????? | 一次模擬的請求數。默認情 況下設置為1。數量不得大于n值 |
| -C cookie-name=value | 可重復的標記,包含cookie信息 |
| -d | 隱藏“percentage served within XX[ms] table” |
| 標記 | 描述 |
| -e | 要創建的.csv文件的路徑。該文件包 含運行的基準測試的結果,該結果分為 兩列,即Percentage和Time in ms。建議 采用“gnuplot”文件 |
| -g | 要創建的“gnuplot”或TSV文件的路徑。 基準測試的輸出將保存到該文件中 |
| -h | 顯示要用于ab的選項列表 |
| -H custom-header | 采用字段值對形式發送有效標頭和請求 |
| -i | 執行HEAD請求,而不是默認的GET請求 |
| -k | 啟用Keep-Alive功能。允許通過一個 HTTP會話滿足多個請求。默認情況下, 該功能處于禁用狀態 |
| -n requests | 要執行的請求總數 |
| -p POST-file | 包含用于HTTP POST請求的數據的 文件路徑。內容應該包含由&分隔的鍵=值對 |
| -P username:password | 采用Base64編碼的字符串。字符串包含 基本身份驗證,以及由“:”分隔的用戶名和密碼 |
| -q | 執行多于100個請求時隱藏進度輸出 |
| -s | 使用https協議,而非默認的http協議 ——不建議這樣做 |
| -S | 隱藏中位數和標準偏差值 |
| -t timelimit | 指定了這個值以后,基準測試的時間 不會超過指定的值。默認情況下無時間限制 |
| -v verbosity-level | 數值為2及以上將打印警告和信息; 為3將打印HTTP響應代碼;4及以 上將打印標頭信息 |
| -V | 顯示ab工具的版本號 |
| -w | 采用HTML表格打印結果 |
| -x <table-attributes> | 表示HTML屬性的字符串, 使用–w時將放置在<table>標記中 |
| -X proxy[:port] | 指定要使用的代理服務器。 代理端口是可選的 |
| -y <tr-attributes> | 表示HTML屬性的字符串, 使用–w時將放置在<tr>標記中 |
| -z <td-attributes> | 表示HTML屬性的字符串, 使用–w時將放置在<td>標記中 |
Webbench最多可以模擬3萬個并發連接數來測試服務器壓力,可以設置壓力測試時間和測試請求的成功率。
1. 安裝:
wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make && make install
如報錯:執行安裝 yum install ctags和yum install gcc,如果有出現沒有文件路徑錯誤,執行:mkdir -m 644 -p /usr/local/man/man1
2. 使用
? ? webbench -c 1000 -t 10 http://www.qq.com/index.PHP,-c是并發數 -t是運行測試時間,即10秒鐘內中以每次100個請求進行測試。
這是運行Webbench測試結果,Speed顯示的是每分鐘響應請求數和每秒鐘傳輸數據量,Requests顯示的是成功請求數和失敗請求數。
為準確得到服務器的承受壓力,測試時并發數可逐漸加大,如并發100時觀察一下網站負載是多少、打開頁面是否流暢,當網站打開緩慢時并發是多少、網站打不開時并發又是多少
Tsung: 重型的(heavy-duty)、分布式的、多協議測試工具 它每秒基本可以產生 40,000 個請求,這絕對是我們想要的工具。類似于 Jmeter,你可以把一些行為記錄下來在測試時運行,并且可以測試大多數的協議。比如 SSL、HHTP、WebDAV、SOAP、PostgreSQL、MySQL、LDAP 和 Jabber/XMPP。與 Jmeter 不同的是,它沒有讓人感到迷茫的 GUI 設置,它僅有一個 XML 配置文件,和一些你選擇的分布式節點的 SSH 密鑰。它的簡潔和效率對我的吸引力,完全不亞于它的健壯性和可擴展性。我發現它是一個很強大的工具,在正確的配置下它可以每秒產生百萬級的 HTTP 請求。 除此之外,Tsung 還可以在 html 上產生圖表以及輸入你的測試的詳細報告。測試的結果通俗易懂,并且你甚至可以把這些圖片展示給你的 boss 看! 在這個系列文章的剩余部分,我還會講解這個工具。現在你可以繼續瀏覽下面的配置說明,或者直接跳到下一頁。 在 CentOS 6.2 上安裝 Tsung 1. 首先,你要安裝(Erlang 需要的) EPEL 源。因此,在進行下一步之前要把它安裝好。安裝完后,繼續安裝你用來產生負載的每個節點需要的包。如果你還沒有在節點之間建立無密碼 SSH 密鑰(passwordless SSH key),那么請建立之。 yum -y install erlang perl perl-RRD-Simple.noarch perl-Log-Log4perl-RRDs.noarch gnuplot perl-Template-Toolkit firefox
2. 從 Github 或者 Tsung 的官網上下載最新的 Tsung。 wget?http://tsung.erlang-projects.org/dist/tsung-1.4.2.tar.gz
3. 解壓并且編譯 tar zxfv ?tsung-1.4.2.tar.gz cd tsung-1.4.2 ./configure && make && make install
使用 把示例配置復制到 ~/.tsung 目錄里。這是 Tsung 的配置文件和日志文件的存放地方(目錄不存在創建即可) cp ?/usr/share/doc/tsung/examples/http_simple.xml /root/.tsung/tsung.xml
你可以根據你的需求去編輯這個配置文件,或者使用我的配置文件。經過大量的嘗試以及失敗后,我目前的配置文件在使用 7 個分布式節點時可以每秒產生 5 百萬個 HTTP 請求。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | <?xmlversion="1.0"?> <!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd"> <tsungloglevel="notice"version="1.0"> <clients> <clienthost="localhost"weight="1"cpu="10"maxusers="40000"> <ipvalue="192.168.122.2"/> </client> <clienthost="loadnode1"weight="1"cpu="9"maxusers="40000"> <ipvalue="192.168.122.2"/> </client> <clienthost="loadnode2"weight="1"maxusers="40000"cpu="8"> <ipvalue="192.168.122.3"/> </client> <clienthost="loadnode3"weight="1"maxusers="40000"cpu="9"> <ipvalue="192.168.122.21"/> </client> <clienthost="loadnode4"weight="1"maxusers="40000"cpu="9"> <ipvalue="192.168.122.11"/> </client> <clienthost="loadnode5"weight="1"maxusers="40000"cpu="9"> <ipvalue="192.168.122.12"/> </client> <clienthost="loadnode6"weight="1"maxusers="40000"cpu="9"> <ipvalue="192.168.122.13"/> </client> <clienthost="loadnode7"weight="1"maxusers="40000"cpu="9"> <ipvalue="192.168.122.14"/> </client> </clients> <servers> <serverhost="192.168.122.10"port="80"type="tcp"/> </servers> <load> <arrivalphasephase="1"duration="10"unit="minute"> <usersmaxnumber="15000"arrivalrate="8"unit="second"/> </arrivalphase> <arrivalphasephase="2"duration="10"unit="minute"> <usersmaxnumber="15000"arrivalrate="8"unit="second"/> </arrivalphase> <arrivalphasephase="3"duration="30"unit="minute"> <usersmaxnumber="20000"arrivalrate="3"unit="second"/> </arrivalphase> </load> <sessions> <sessionprobability="100"name="ab"type="ts_http"> <forfrom="1"to="10000000"var="i"> <request> <httpurl="/test.txt"method="GET"version="1.1"/> </request> </for> </session> </sessions> </tsung> |
| vim ~/.bashrc aliastreport="/usr/lib/tsung/bin/tsung_stats.pl; firefox report.html" |
| 1 | source~/.bashrc |
| 1 2 3 | [root@loadnode1 ~] tsung start Starting Tsung "Log directory is: /root/.tsung/log/20120421-1004" |
| 1 2 | cd/root/.tsung/log/20120421-1004 treport #生成圖片報告 |
使用 Tsung 去規劃你的集群構造 現在我們擁有了一個足夠強大的負載測試工具,我們可以規劃余下的集群構造了: 1. 使用 Tsung 去測試一個單一的 HTTP 服務器。獲取一個基本的基準。 2. 對 web 服務器進行調優,定期使用 Tsung 進行測試提高性能。 3. 對這些系統的 TCP 套接字進行調優,獲取最佳的網絡性能。再來一次,測試,測試,不停地測試。 4. 構造 LVS 集群,它包含了這些充分調優過的 web 服務器。 5. 使用 Tsung IP 集群對 LVS 進行壓力測試。 ?參考???http://mp.weixin.qq.com/s?__biz=MjM5MzA0OTkwMA==&mid=209045568&idx=1&sn=528b1b30d8edd3af704fe3c0546072e5&scene=5#rd?
from:?http://blog.csdn.net/jerome_s/article/details/47030671
總結
以上是生活随笔為你收集整理的程序压力测试、性能测试AB、Webbench、Tsung的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 性能测试vs负载测试vs压力测试
- 下一篇: 十个免费的WEB压力测试工具