http://linyu19872008.iteye.com/blog/1605707
文档历史
日期 |
作者 |
版本 |
注释 |
2012/05/15 |
sina微博:weibo.com/csx1998 |
1.0 |
创建 |
|
|
|
|
|
|
|
|
一、 Tsung概述
tsung是一个非常好用的压力测试软件,基于erlang语言,支持多种协议如xmpp,http,mysql,支持集群,高效率,可以用一台普通的机器压垮几台性能强大的服务器。
针对消息通知服务xmpp服务器,可以用tsung来测试消息通知服务能承受多大的压力。
在Ubuntu上装好tsung之后,首先要用ulimit修改系统支持的最大fd数量(ulimit -n 20480),否则tsung最多只能创建不到1024个连接,测试脚本是一个xml文件
详细参看:http://wenku.baidu.com/view/6fd5e6d126fff705cc170af2.html
二、 Tsung的安装
1、下载Tsung:
从Tsung的官方网站下载源代码(http://tsung.erlang-projects.org/dist/),目前最新的是tsung-1.4.1.tar.gz,这边安装的也是tsung-1.4.1.tar.gz ftp到服务器上解压
2、安装Tsung的依赖组件:
a、Erlang及相关组件(必装) :sudo apt-get install erlang erlang-nox erlang-dev erlang-parsetools
b、gnuplot、perl5及template模板(如果需要生成报表的话): sudo apt-get install perl5 gnuplot libtemplate-perl
3、编译Tsung
cd到Tsung的解压目录编译
./configure
make
sudo make install
4、编写tsung.xml配置文件
~/.tsung/tsung.xml为tsung默认的配置文件,在/usr/share/doc/tsung/examples/中有一些示例文件,如下:
可以参考jabber.xml文件来编写自己的tsung.xml
5、运行Tsung
tsung start 或者 tsung -f jabber.xml start运行后,tsung会将数据保存在~/.tsung/log/目录下,完整目录示例如下:/home/grape/.tsung/log/20120515-1636
6、生成报表
tsung运行完成后,进入~/.tsung/log/***/目录,然后运行 /usr/lib/tsung/bin/tsung_stats.pl,会生成html报表页面。
2.xmpp的Tsung.xml配置
编译Tsung后/usr/share/doc/tsung下包含测试的配置实例xml和tsung的用户手册user_manual.html
本次测试使用以下配置
<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung loglevel="notice" version="1.0">
<!--如果use_controller_vm="false",那么每maxusers个连接后会创建一个新的erlangVM,maxuser默认是800 否则达到上限就不再创建连接 能打开了limits,就不要使用多个erlangVM,容易crash 需要执行ulimit -n 20480-->
<clients>
<!--可以配置多台客户端-->
<client host="localhost" use_controller_vm="true" maxusers="10000"></client>
</clients>
<!-- Server side setup配置服务器IP或域名-->
<servers>
<server host="192.168.3.242" port="5222" type="tcp"></server>
</servers>
<load>
<!--可以配置多个阶段相位,这边使用20分钟 也可以设置unit="minute"-->
<arrivalphase phase="1" duration="1200" unit="second">
<!--这边不是生成用户的时间间隔而,是总共尝试去连接的session数目,为了使所有用户都去连接,这边要计算出连接间隔 -->
<users maxnumber="12000" interarrival="0.1" unit="second"></users>
</arrivalphase>
</load>
<!-- JABBER parameters -->
<!-- to synchronise users, use a global acknoledgement -->
<options>
<option type="ts_jabber" name="global_number" value="10001"></option>
<option type="ts_jabber" name="userid_max" value="10000"></option>
<option type="ts_jabber" name="domain" value="test.rzico.net"></option>
<!--账号和密码后面加上 1 到 userid_max 个后缀 去xmpp服务器上授权-->
<option type="ts_jabber" name="username" value="chenshaoxian"></option>
<option type="ts_jabber" name="passwd" value="chenshaoxian"></option>
</options>
<sessions>
<!—probability值加起来要达到100 -->
<session probability="50" name="jabber-example" type="ts_jabber">
<request> <jabber type="connect" ack="no_ack"></jabber> </request>
<thinktime value="2"></thinktime>
<transaction name="authenticate">
<request> <jabber type="auth_get" ack="local"></jabber> </request>
<request> <jabber type="auth_set_plain" ack="local"></jabber> </request>
</transaction>
<!-- "presence:initial" : connected -> online -->
<!-- "presence:final" : online -> connected-->
<request> <jabber type="presence:initial" ack="no_ack"/> </request>
<thinktime value="2"></thinktime>
<transaction name="roster">
<request> <jabber type="iq:roster:get" ack="local"></jabber></request>
</transaction>
<thinktime value="30"></thinktime>
<transaction name="online">
<request> <jabber type="chat" ack="no_ack" size="16" destination="online"></jabber> </request>
</transaction>
<thinktime value="30"></thinktime>
<transaction name="offline">
<request> <jabber type="chat" ack="no_ack" size="56" destination="offline"></jabber> </request>
</transaction>
<thinktime value="30"></thinktime>
<transaction name="close">
<request> <jabber type="close" ack="no_ack"></jabber> </request>
</transaction>
</session>
<session probability="20" name="jabber-plain" type="ts_jabber">
<request> <jabber type="connect" ack="no_ack"></jabber> </request>
<thinktime value="2"></thinktime>
<transaction name="auth_plain">
<request> <jabber type="auth_get" ack="local"></jabber> </request>
<request> <jabber type="auth_set_plain" ack="local"></jabber> </request>
</transaction>
<thinktime value="30"></thinktime>
<transaction name="close">
<request> <jabber type="close" ack="no_ack"></jabber> </request>
</transaction>
</session>
<session probability="20" name="jabber-digest" type="ts_jabber">
<!-- regexp captures stream ID returned by server -->
<request>
<dyn_variable name="sid" re="<stream:stream id="(.*)" xmlns:stream"/>
<jabber type="connect" ack="local"></jabber>
</request>
<thinktime value="2"></thinktime>
<transaction name="auth_digest">
<request> <jabber type="auth_get" ack="local"></jabber> </request>
<request subst='true'> <jabber type="auth_set_digest" ack="local"></jabber> </request>
</transaction>
<thinktime value="30"></thinktime>
<transaction name="close">
<request> <jabber type="close" ack="no_ack"></jabber> </request>
</transaction>
</session>
<session probability="10" name="jabber-sipdigest" type="ts_jabber">
<request> <jabber type="connect" ack="no_ack"></jabber> </request>
<thinktime value="2"></thinktime>
<transaction name="auth_sipdigest">
<!-- regexp captures nonce value returned by server -->
<request>
<dyn_variable name="nonce" re="<Nonce encoding="hex">(.*)<\/Nonce>"/>
<jabber type="auth_get" ack="local"></jabber>
</request>
<request subst='true'> <jabber type="auth_set_sip" ack="local"></jabber> </request>
</transaction>
<thinktime value="30"></thinktime>
<transaction name="close">
<request> <jabber type="close" ack="no_ack"></jabber> </request>
</transaction>
</session>
</sessions>
</tsung>
3.Tsung报表分析
对报表参数不太了解可以试着参看服务器上的tsung的用户手册user_manual.html
或参看:http://tsung.erlang-projects.org/user_manual.html
一些常用的名词解析:
request:每个请求的反应时间
page:每一系列请求的反应时间(a page是一组不包含think-time的一组请求)
connect:连接建立用的时间
reconnect:重新连接的次数
size_rcv:反应的大小(单位是byte)
size_sent:请求的大小(单位是byte)
session:用户会话时间
users:同步用户数
connected:同步连接用户数
Tsung收集到监控数据后,会发送到数据统计进程。其实在会话进程运行时,也会产生大量的统计数据,比如发送了多个请求,执行了多个个事务(Tsung事务),通过网络发送了多少数据,收到多少数据等等。
根据手册中描述,Tsung的统计数据分为四类:sample,sample_counter,counter,sum。其中sample与sample_counter会每10秒计算一次统计项的平均值及其标准差,并写入文件;而counter是一个单纯的计数器,用在比如一共发送了多个请求这样的统计项上;sum统计项有一个累积的过程,例如HTTP响应的总大小。sample类型的数据写入的数据格式如下:
# stats:’name’ 10sec_count, 10sec_mean, 10sec_stdvar, max, min, mean, count
而counter类型的数据格式如下:
# stats:’name’ count(during the last 10sec), totalcount(since the beginning)
跟数据统计相关的模块主要有三个:ts_mon:提到数据统计的接口,监控数据的添加主要通过该模块中的接口来完成;ts_mon_cache:缓存,统计数据的内存写入由此模块完成;ts_stats_mon:将统计数据写入到文件。
添加一个统计项,一般的都通过调用ts_mon:add这个接口来完成,然后ts_mon:add会调用ts_mon_cache将统计项先写入内存。ts_mon_cache初始化是会定义一个定时器,每10秒会触发调用ts_stats_mon:add将10秒内的统计数据写入文件。
4.tigase服务器的调整
调整tigase.config配置文件,调整如下:
ENC="-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"
#DRV="-Djdbc.drivers=com.mysql.jdbc.Driver:org.postgresql.Driver:org.apache.derby.jdbc.EmbeddedDriver"
DRV="-Djdbc.drivers=org.postgresql.Driver"
GC="-XX:+UseBiasedLocking -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:ParallelCMSThreads=8"
JAVA_HOME="/home/zhangtc/share/jdk1.6.0_31"
CLASSPATH=""
JAVA_OPTIONS="${GC} ${ENC} ${DRV} -server -d64 -Xms1024M -Xmx2048M -XX:PermSize=64m -XX:MaxPermSize=256m -XX:MaxDirectMemorySize=128m "
TIGASE_CONFIG="etc/tigase.xml"
TIGASE_OPTIONS=" --property-file etc/init.properties --test"
调整init.properties配置文件,调整如下:
config-type=--gen-config-def
--admins=admin@test.rzico.net
--virt-hosts = test.rzico.net
--auth-db=tigase-auth
--user-db=mysql
--user-db-uri=jdbc:mysql://192.168.3.245:3306/tigasedb?user=root&password=123456
--user-repo-pool-size=12
--comp-name-1=srecv
--comp-class-1=tigase.server.sreceiver.StanzaReceiver
#--debug=server
#--monitoring=jmx:9050
编写数据库插入代码,在数据库插入相应的用户数据和相关联数据
原始tigase的负载能力,
报表地址如下:
http://192.168.3.242:8080/20120515-1513/report.html
Tigase和UIC使用数据库触发器关联的负载能力:
报表地址如下:
http://192.168.3.242:8080/20120516-1222/report.html(未做监控)
http://192.168.3.242:8080/20120516-1525/report.html
测试时间(20120516-1525到20120516-1545)
CPU、内存、网络监控图:
从图表可看出在242服务器(tigase未做群集的情况)下带20000个用户产生的负载是比较低的。
grape-sync完整集成tigase后, grape-sync负载能力,后续更新
相关推荐
### Tsung负载测试Tigase知识点详解 #### Tsung概述 Tsung是一款高效的压力测试工具,采用Erlang语言开发,能够支持多种网络协议,包括XMPP、HTTP、MySQL等。其独特的分布式特性使得它能够在单机环境下模拟大量...
Tsung是一款开源的多协议负载测试工具,它能够模拟大量用户并发访问服务器,用于测试系统的性能和稳定性。Tsung支持多种协议,包括HTTP、HTTPS、FTP、SOAP、XML-RPC、 Jabber/XMPP、MySQL、PostgreSQL等,以及我们...
包括tigase的安装运行,tsung的安装运行,压测结果的信息解析等;
tsung是用erlang开发的一款简单易用的压力测试工具,目前仅支持linux各版本系统安装,有tar.gz和deb两种安装文件, 目前我们测试用的是CentOS或RedHat两种操作系统,因此选择tar.gz安装文件,总的来说tsung工具有...
"Stronger:基于tsung的负载测试服务"这个项目,就是针对这一需求而设计的,它利用开源工具Tsung来构建强大的负载测试解决方案。Tsung是一个分布式、多协议的负载和性能测试工具,适用于多种网络服务,如HTTP、FTP、...
TSUNG是一款开源的负载与压力测试工具,主要用于评估系统的性能及稳定性。它支持多种协议,包括但不限于XMPP、HTTP、MySQL等,并且具备支持集群和高效运行的特点。由于其基于Erlang语言开发,TSUNG能够利用较少的...
**Tsung 1.6.0 - 开源多协议分布式负载测试工具** Tsung是一个功能强大的、基于Erlang编程语言开发的开源负载测试工具。它设计用于模拟大量用户并发访问,以测试网络服务和系统的性能及稳定性。Tsung不仅支持HTTP、...
MQTT压力测试之Tsung的使用 MQTT压力测试之Tsung的使用
Tsung的XML配置文件包含多个部分,如`load`定义测试的负载模型,`servers`定义服务器信息,`clients`定义客户端设置,`sessions`描述用户行为等。深入理解这些元素的含义和用法是创建有效测试场景的关键。 总之,...
该配置文件定义了Tsung的测试行为,包括文件结构、客户端与服务器的配置、监控选项以及如何定义负载进展、设置选项和会话控制。Tsung的高级特性包括动态替换、读取外部文件、动态变量、检查服务器响应和循环等。 在...
Tsung是多协议分布式负载测试工具。 它可用于测试基于IP的客户端/服务器应用程序(支持的协议:HTTP,WebDAV,SOAP,PostgreSQL,MySQL,LDAP,MQTT,AMQP和Jabber / XMPP)的可伸缩性和性能。 可以找到用户手册:...
tsung高并发测试工具搭建(自己亲测,详细的一逼),改文档是自己一步一步摸索出来的,主要是安装tsung整个过程很详细,搭过的人,知道tsung的搭建依赖很恶心,不是一时半会能搞出来的
Tsung 是一个开源的多协议负载和性能测试工具,它可以模拟大量用户并发访问服务器,从而评估系统的负载能力和稳定性。Tsung 的设计目标是提供一个灵活、可扩展的解决方案,能够测试各种网络服务,如 HTTP、FTP、TCP...
【RedDiamond_Tsung_tests: RedDiamond的负载测试】 负载测试是评估系统在高负载下性能和稳定性的关键过程,而RedDiamond_Tsung_tests正是一项针对RedDiamond系统的负载测试实践。RedDiamond可能是一个分布式应用、...
介绍Tsung的负载测试 我是谁? Radek Szymczyszyn XMPP / MongooseIM工程师 / / 什么是负载测试? 性能测试的类型: 在特定负载下进行测试-在一个4核,64GiB RAM盒上,如果有10万用户登录并彼此交换消息,则...
tsung的测试脚本,包含发送单人消息,群组消息,获取花名册等
Openfire 3.9.3 Load Test Tsung配置xml,10万用户下集群测试的Tsung压力测试工具的jabber_cluster.xml,session 5分钟
压力测试 压力测试 tsung linux
【tsung-1.5.1.tar.gz】是一款开源的压力测试工具,专为评估系统在高负载下的性能和稳定性而设计。它具有广泛的应用场景,特别是在测试分布式系统,如即时通讯服务器Openfire时表现尤为出色。这个压缩包包含了Tsung...
`Tsung` 是一个开源的负载测试工具,广泛用于评估分布式系统,如 Web 应用、数据库和 LDAP 服务器等。它支持多种协议,包括 HTTP、HTTPS、FTP、TCP 和ejabberd 等。`Tsung` 的强大之处在于它的可扩展性和灵活性,...