tsung是一个非常好用的压力测试软件,基于erlang语言,支持多种协议如xmpp,http,mysql,支持集群,高效率(可以用一台普通的机器压垮几台性能强大的服务器)。
在公司建立内部xmpp服务器时,就可以用tsung来看看这个服务器能够承受多大的压力。
在Ubuntu上装好tsung之后,首先要用ulimit修改系统支持的最大fd数量,否则tsung最多只能创建不到1024个连接。
测试脚本是一个xml文件,就像下面这样:
- <?xml version="1.0"?>
-
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
-
<tsung loglevel="notice" version="1.0">
-
-
<!-- 下载 : http://tsung.erlang-projects.org/ -->
-
-
<clients>
-
<client host="localhost" use_controller_vm="false" maxusers="50000"></client>
-
<!--要求能够用私钥ssh到本机,并且连通一次,留下记录在known_hosts-->
-
<!--如果use_controller_vm="false",那么每maxusers个连接后会创建一个新的erlangVM,maxuser默认是800-->
-
<!--否则达到上限就不再创建连接-->
-
<!--能打开了limits,就不要使用多个erlangVM,容易crash-->
-
</clients>
-
-
<!-- Server side setup -->
-
<servers>
-
<server host="svr1.myserver.com" port="5222" type="tcp"></server>
-
</servers>
-
-
<load>
-
<arrivalphase phase="1" duration="3600" unit="second">
-
<users maxnumber="30000" interarrival="0.01" unit="second"></users>
-
<!--总共启动的session数目,不过如果连接间隔是0.01的话,不是所有的session都能连接成功-->
-
</arrivalphase>
-
</load>
-
-
<!-- JABBER parameters -->
-
<!-- to synchronise users, use a global acknoledgement -->
-
<options>
-
<option type="ts_jabber" name="global_number" value="99999"></option>
-
<option type="ts_jabber" name="userid_max" value="50000"></option>
-
<!--总共账号数目,每个账号同时只登录一次-->
-
<option type="ts_jabber" name="domain" value="myserver.com"></option>
-
<option type="ts_jabber" name="username" value="myaccount"></option>
-
<option type="ts_jabber" name="passwd" value="mypassword"></option>
-
<!--账号和密码后面加上 1 到 userid_max 个后缀,后缀不用零填充,长度可变-->
-
</options>
-
-
<sessions>
-
-
<session probability="100" name="jabber-example" type="ts_jabber">
-
-
<request> <jabber type="connect" ack="local"></jabber> </request>
-
<transaction name="authenticate">
-
<request> <jabber type="auth_get" ack="local"></jabber> </request>
-
<request> <jabber type="auth_set_plain" ack="local"></jabber> </request>
-
</transaction>
-
-
<request> <jabber type="presence:initial" ack="no_ack"/> </request>
-
<!-- "presence:initial" : connected -> online -->
-
<!-- "presence:final" : online -> connected-->
-
-
-
<thinktime value="2"></thinktime>
-
<transaction name="roster">
-
<request> <jabber type="iq:roster:get" ack="local"></jabber></request>
-
</transaction>
-
-
<thinktime value="3"></thinktime>
-
<transaction name="online">
-
<request> <jabber type="chat" ack="no_ack" size="16" destination="online"></jabber> </request>
-
</transaction>
-
-
-
<for from="1" to="180" incr="1" var="counter">
-
<thinktime value="120"></thinktime>
-
<request> <jabber type="presence:initial" ack="no_ack"/> </request>
-
<!--"%%_counter%%"-->
-
</for>
-
-
-
<transaction name="offline">
-
<request> <jabber type="chat" ack="no_ack" size="56" destination="offline"></jabber> </request>
-
</transaction>
-
-
<request> <jabber type="presence:final" ack="no_ack"/> </request>
-
-
<transaction name="close">
-
<request> <jabber type="close" ack="no_ack"></jabber> </request>
-
</transaction>
-
-
<!-- 一个session结束后,tsung会立刻启动新的session(即使在这里休眠3600秒),(如果服务器承受得了)保证一直有 userid_max 个连接。如果不想这样,那么用maxnumber来限制最多启用的session数目即可 -->
-
</session>
-
-
-
-
</sessions>
-
</tsung>
阅读(12769) | 评论(2) | 转发(0) |