tsung是指开源的多协议分布式负载测试工具,根据erlang语言开发。
介绍
一个开源的多协议分布式负载测试工具,使用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>