介紹
一個開源的多協定分散式負載測試工具,使用erlang語言開發的。
作用
它能用來壓力測試HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP 和 Jabber/XMPP的伺服器。它可以分布在多個客戶機,並能夠模擬成千上萬的虛擬用戶數並發。
用法
下面的描述以HTTP壓力測試為例。
準備知識
了解ssh的key認證機制。
單“客戶機”壓測
“小型”的壓力測試一般不需要很多tsung客戶機,一台tsung就可以打出很大的壓力,因為tsung使用了epoll技術,在一個進程中,就可以管理上萬級別的socket(注意ulimit -n的限制),相對於其它壓力測試工具(比如webbench)使用多執行緒,在打出相同壓力的情況下,tsung對客戶機資源的消耗要小得多得多。另外,tsung又可以多進程,使用系統的SMP特性,相比於ab這樣的工具(ab也是使用epoll技術,但是ab只能單進程——需要手動啟動多個來達到多進程的目的,多進程才可以充分使用CPU的多核),可以更充分地利用客戶機的硬體資源。
單客戶機壓測,架構最簡單。其Clients端如下配置:
<clients>
<client host="bj-tsung1" use_controller_vm="true"/>
</clients>
執行時,將配置檔案複製到bj-tsung1,然後在bj-tsung1上執行“啟動壓測”命令:
tsung -f tsung.xml start
“客戶機”集群壓測
當一台壓測機,不能滿足壓力需求;或者為了更逼真地模似真實壓力時,可台使用“tsung客戶機集群“來打壓務。
假如我們有bj-tsung[1-4] 4台tsung客戶機(安裝了相同erlang、tsung版本的機器),Clients段配置如下:
<clients>
<client host="bj-tsung1"maxusers="800" cpu="8"/>
<client host="bj-tsung2"maxusers="800" cpu="8"/>
<client host="bj-tsung3"maxusers="800" cpu="8"/>
<client host="bj-tsung4"maxusers="800" cpu="8"/>
</clients>
注意,執時啟動命令時,要在一台能ssh登錄bj-tsung[1-4]這4台機器,而且不需要輸入密碼的機器上執行。
比如我有一台bj-login1,這台機器登錄bj-tsung[1-4]不需要密碼(使用key認證),我就可以在bj-login1上執行啟動壓測命令:
tsung -f tsung.xml start
這時,可以看到bj-tsung[1-4]上啟動了很多erl進程,就是tsung客戶機在執行了。
HTTP測試常見問題
我遇到的兩個問題是:
如何自定義http的"Host"頭兒,以避免使用/etc/hosts檔案。
如何讓tsung使用”壓縮“方式接收數據。
上面兩個問題的解法如下:
1.如何自定義http的"Host"頭兒,以避免使用/etc/hosts檔案。
2.如何讓tsung使用”壓縮“方式接收數據。
上面兩個問題的解法如下:
<request>
<http url="/" method="GET" version="1.1">
<http_header name="Accept-Encoding" value="gzip,deflate"/>
<http_header name="Host" value="domainname"/>
</http>
</request>