`
linyu19872008
  • 浏览: 284157 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Tsung负载测试Tigase(转)

 
阅读更多

 

Tsung负载测试Tigase

 

 

 

 

 

 

 

 

 

 

 

 

文档历史

日期

作者

版本

注释

2012/05/15

sina微博:weibo.com/csx1998

1.0

创建

 

 

 

 

 

 

 

 

一、 Tsung概述

tsung是一个非常好用的压力测试软件,基于erlang语言,支持多种协议如xmpphttpmysql,支持集群,高效率,可以用一台普通的机器压垮几台性能强大的服务器。

针对消息通知服务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的依赖组件:

aErlang及相关组件(必装) :sudo apt-get install erlang erlang-nox erlang-dev erlang-parsetools

bgnuplotperl5template模板(如果需要生成报表的话): sudo apt-get install perl5 gnuplot libtemplate-perl

3、编译Tsung

cdTsung的解压目录编译

./configure

make

sudo make install

4、编写tsung.xml配置文件

~/.tsung/tsung.xmltsung默认的配置文件,在/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.xmppTsung.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个连接后会创建一个新的erlangVMmaxuser默认是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>

<!--账号和密码后面加上 到 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

TigaseUIC使用数据库触发器关联的负载能力:

报表地址如下:

http://192.168.3.242:8080/20120516-1222/report.html(未做监控)

http://192.168.3.242:8080/20120516-1525/report.html

测试时间(20120516-152520120516-1545

CPU、内存、网络监控图: 



 

 

 


从图表可看出在242服务器(tigase未做群集的情况)下带20000个用户产生的负载是比较低的。

grape-sync完整集成tigase后, grape-sync负载能力,后续更新

  • 大小: 24.8 KB
  • 大小: 15.5 KB
  • 大小: 26.4 KB
  • 大小: 11.3 KB
分享到:
评论

相关推荐

    Tsung负载测试tigase

    ### Tsung负载测试Tigase知识点详解 #### Tsung概述 Tsung是一款高效的压力测试工具,采用Erlang语言开发,能够支持多种网络协议,包括XMPP、HTTP、MySQL等。其独特的分布式特性使得它能够在单机环境下模拟大量...

    XMPP服务器的性能分析跟优化.docx

    7. **压力测试**:使用工具如Tsung进行负载测试,了解服务器在不同压力下的表现,为优化提供依据。 8. **代码优化**:针对热点代码进行性能调优,减少不必要的计算和资源消耗。 综上所述,Openfire和Tigase作为...

    XMPP服务器的性能分析跟优化.pdf

    1. **负载测试**:使用如Tsung这样的工具进行压力测试,模拟大量用户并发连接,以评估服务器在高负载下的表现。 2. **资源优化**:合理分配硬件资源,如内存、CPU和磁盘I/O,确保服务器能有效处理并发连接。 3. **...

    Openfire 性能优化

    测试工具如 Tsung 可用于模拟大量用户登录和其他网络请求,以评估服务器性能。在单台服务器性能接近极限时,考虑集群部署。然而,Openfire 的集群解决方案可能存在稳定性问题,如 war 包插件和 Oracle 集群插件在高...

    手撕源码C++哈希表实现:从底层原理到性能优化,看完面试官都怕你!(文末附源码)

    哈希表源码

    sun_3ck_03_0119.pdf

    sun_3ck_03_0119

    MATLAB实现基于LSTM-AdaBoost长短期记忆网络结合AdaBoost时间序列预测(含模型描述及示例代码)

    内容概要:本文档详细介绍了基于 MATLAB 实现的 LSTM-AdaBoost 时间序列预测模型,涵盖项目背景、目标、挑战、特点、应用领域以及模型架构和代码示例。随着大数据和AI的发展,时间序列预测变得至关重要。传统方法如 ARIMA 在复杂非线性序列中表现欠佳,因此引入了 LSTM 来捕捉长期依赖性。但 LSTM 存在易陷局部最优、对噪声鲁棒性差的问题,故加入 AdaBoost 提高模型准确性和鲁棒性。两者结合能更好应对非线性和长期依赖的数据,提供更稳定的预测。项目还展示了如何在 MATLAB 中具体实现模型的各个环节。 适用人群:对时间序列预测感兴趣的开发者、研究人员及学生,特别是有一定 MATLAB 编程经验和熟悉深度学习或机器学习基础知识的人群。 使用场景及目标:①适用于金融市场价格预测、气象预报、工业生产故障检测等多种需要时间序列分析的场合;②帮助使用者理解并掌握将LSTM与AdaBoost结合的实现细节及其在提高预测精度和抗噪方面的优势。 其他说明:尽管该模型有诸多优点,但仍存在训练时间长、计算成本高等挑战。文中提及通过优化数据预处理、调整超参数等方式改进性能。同时给出了完整的MATLAB代码实现,便于学习与复现。

    免费1996-2019年各地级市平均工资数据

    1996-2019年各地级市平均工资数据 1、时间:1996-2019年 2、来源:城市nj、各地级市统计j 3、指标:平均工资(在岗职工) 4、范围:295个地级市

    [AB PLC例程源码][MMS_040384]Winder Application.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    C2Former: 解决RGB-红外物体检测中模态校准与融合不精确问题的标定互补变压器

    内容概要:本文介绍了一种新颖的变压器模型C2Former(Calibrated and Complementary Transformer),专门用于解决RGB图像和红外图像之间的物体检测难题。传统方法在进行多模态融合时面临两个主要问题——模态错位(Modality miscalibration)和融合不准确(fusion imprecision)。作者针对这两个问题提出采用互模交叉注意力模块(Inter-modality Cross-Attention, ICA)以及自适应特征采样模块(Adaptive Feature Sampling, AFS)来改善。具体来说,ICA可以获取对齐并且互补的特性,在特征层面进行更好的整合;而AFS则减少了计算成本。通过实验验证了基于C2Former的一阶段和二阶段检测器均能在现有公开数据集上达到最先进的表现。 适合人群:计算机视觉领域的研究人员和技术人员,特别是从事跨模态目标检测的研究人员,对Transformer架构有一定了解的开发者。 使用场景及目标:适用于需要将可见光和热成像传感器相结合的应用场合,例如全天候的视频监控系统、无人驾驶汽车、无人

    上海人工智能实验室:金融大模型应用评测报告-摘要版2024.pdf

    上海人工智能实验室:金融大模型应用评测报告-摘要版2024.pdf

    malpass_02_0907.pdf

    malpass_02_0907

    C++-自制学习辅助工具

    C++-自制学习辅助工具

    微信生态系统开发指南:涵盖机器人、小程序及公众号的技术资源整合

    内容概要:本文提供了有关微信生态系统的综合开发指导,具体涵盖了微信机器人的Java与Python开发、全套及特定应用的小程序源码(PHP后台、DeepSeek集成),以及微信公众号的基础开发与智能集成方法。文中不仅给出了各种应用的具体案例和技术要点如图灵API对接、DeepSeek大模型接入等的简述,还指出了相关资源链接以便深度探究或直接获取源码进行开发。 适合人群:有意开发微信应用程序或提升相应技能的技术爱好者和专业人士。不论是初涉者寻求基本理解和操作流程,还是进阶者期望利用提供的资源进行项目构建或是研究。 使用场景及目标:开发者能够根据自身兴趣选择不同方向深入学习微信平台的应用创建,如社交自动化(机器人)、移动互联网服务交付(小程序),或者公众信息服务(公众号)。特别是想要尝试引入AI能力到应用中的人士,文中介绍的内容非常有价值。 其他说明:文中提及的多个项目都涉及到了最新技术栈(如DeepSeek大模型),并且为不同层次的学习者提供从零开始的详细资料。对于那些想要迅速获得成果同时深入了解背后原理的人来说是个很好的起点。

    pimpinella_3cd_01_0916.pdf

    pimpinella_3cd_01_0916

    mellitz_3cd_01_0516.pdf

    mellitz_3cd_01_0516

    schube_3cd_01_0118.pdf

    schube_3cd_01_0118

    [AB PLC例程源码][MMS_046683]ME Faceplates for 1738 Digital and Analog I-O with Descriptions.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_040371]Communication between CompactLogix Controllers on DeviceNet.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_046507]SE Faceplates for 1797 Digital and Analog I-O.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

Global site tag (gtag.js) - Google Analytics