文档章节

Tsung学习笔记

今幕明
 今幕明
发布于 2014/06/23 15:04
字数 2334
阅读 2696
收藏 1
点赞 0
评论 0

介绍

HTTP,WebDAV,SOAP,PostgreSQL,MySQL,LDAPTsung可以模拟上百万用户OS  IP别名技术在单个机器上使用多(CPU,内存), 支持XML方式的配置文件

模拟真实的流量HTML或者图表的方式报告测试结果

下载程序包

下载   wget http://www.erlang.org/download/otp_src_R14B.tar.gz

下载   wget http://ncu.dl.sourceforge.net/project/gnuplot/gnuplot/4.4.2/gnuplot-4.4.2.tar.gz

下载   wget tsung压力工具1.3.1

http://tsung.erlang-projects.org/dist/tsung-1.3.3.tar.gz

注意:如果使用集群安装/root/

对上面下载的对应的./configure --with-readline=builtin

如果在tsung,那么首先配置工具配置文件,将1个执行文件到tsung.xml,例如:

我们要模拟cp /root/tsung-1.3.3/examples/http_simple.xml ~/.tsung/tsung.xml

然后找到路径")格式添加  -->

<!DOCTYPE tsung SYSTEM "/usr/local/share/tsung/tsung-1.0.dtd" [

<!ENTITY sessions1 SYSTEM "/root/.tsung/notifications_send.xml">

<!ENTITY sessions2 SYSTEM "/root/.tsung/msg_statistics_new_count.xml">

<!ENTITY sessions3 SYSTEM "/root/.tsung/msg_statistics_view.xml">

<!ENTITY sessions4 SYSTEM "/root/.tsung/other_msgs_reset_count.xml">

] >

<!-- loglevel:工具写日志的标识,级别默认是"info",长时间运行建议调整为error  -->

<!-- dumptraffic:运行的调试信息dump文件,如需要看脚本是否正确可以设置为"true"

                 级别默认是"false",长时间运行建议调整为false -->

<tsung loglevel="error" dumptraffic="false" version="1.0">

  <!-- 集群Client的设置 -->

  <clients>

<!-- host:填别名,需要先去host文件配置,如:

       127.0.0.1        localhost        

       10.0.0.252       s252      

       10.0.0.52        sl52

-->

  <!-- weight 节点上面用户的比例,一般设置为1即可 -->

   <!-- maxusers 一般设置为8003000即可,根据机器配置来设置大小  -->

   <!-- cpu 根据机器硬件配置来设置,如果是4CPU,最佳设置为3,以此类推  -->

  <client host="localhost" weight="1" maxusers="3000" cpu="3"/>

  </clients>

  <!-- 集群servers的设置 -->

<servers>

  <!-- host 填别名,需要先去host文件配置 -->

  <!-- port 填可用对外端口,一般8080 -->

  <!-- type 协议类型,tsung支持tcp/udp,根据自己的需要  -->

  <server host="localhost" port="8080" type="tcp"></server>

</servers>

  <!-- 监控(cpu, network, memory). 使用erlangSNMPerlang是默认值

       但是要保证监控的机器和server可以互相访问,装有erlang,否则用snmp  -->

  <monitoring>

  <!-- host 填别名,需要先去host文件配置 -->

    <monitor host="localhost" type="erlang"></monitor>

  </monitoring>

  <!-- 负载场景设置 -->

  <load>

  <!-- phase:阶段,填数字即可,系统会按顺序执行,可是设置多个阶段组合场景 -->

  <!-- duration:持续时段,填数字即可,单位是unit="minute"设置,是分钟

                 也可设置小时,天,详细情况参考API -->

  <!-- arrivalrate:虚拟用户数,填写数字即可,一般最大800,如过机器配置好,可自己调试最佳参数

       有效单位unit="second" 是秒,每秒虚拟300个虚拟用户,实际执行情况可能超过,也可能达不到,需要根据调试得到最佳参数 -->

   <arrivalphase phase="1" duration="1" unit="minute">

     <users arrivalrate="300" unit="second"></users>

   </arrivalphase>

  </load>

<!-- 脚本执行的基本参数设置 -->

  <options>

<!-- .CSV文件读取测试数据,id必须唯一,如需要从数据库读取测试数据,请参考API  -->

<option name="file_server" id='userdb' value="/root/.tsung/test_userid.csv"/>

<option name="file_server" id='user' value="/root/.tsung/test_user.csv"/>

<!-- 设置用户请求的浏览器信息,probability为比重,总值为100 -->

   <option type="ts_http" name="user_agent">

    <user_agent probability="50">Mozilla/5.0 (X11; U; Linux  i686; en-US; rv:1.7.8) Gecko/20050513 Galeon/1.3.21</user_agent>

    <user_agent probability="50">Mozilla/5.0 (Windows; U;  Windows NT 5.2; fr-FR; rv:1.7.8) Gecko/20050511  Firefox/1.0.4</user_agent>

   </option>

  </options>

  <!-- 测试脚本,session'sprobabilities 参数总和必须为100,在每个-->

<sessions>

 &sessions1;

 &sessions2;

 &sessions3;

 &sessions4;

</sessions>

</tsung>

见附件xxxxx.xml文件,文档格式如下:

<!-- 测试脚本的设置 -->

<sessions>

<!-- name:脚本名称,唯一值  -->

<!-- probability:压力比重,总值100,可按需求设置  -->

<!-- type:这里根据测试对象来,我这里是http请求,其他类型参考API  -->

<session name="msg_statistics" probability="100" type="ts_http">

<!-- 变量的设置 -->

<!-- sourcetype:根据需求,参考API,我这里是csv文件  -->

<!-- fileid:根据tsung.xml内的option文件操作的id一致  -->

<!-- order:我这里选择的random随机,根据需求参考API  -->

<!-- name:这个变量的名称  -->

<setdynvars sourcetype="file" fileid="user" order="random">

<var name="userid" />

</setdynvars>

<!-- sourcetype:根据需求,参考API,我这里是csv文件  -->

<!-- fileid:根据tsung.xml内的option文件操作的id一致  -->

<!-- order:我这里选择的random随机,根据需求参考API  -->

<!-- name:这个变量的名称  -->

<setdynvars sourcetype="file" fileid="userdb" order="random">

<var name="user" />

</setdynvars>

<!-- sourcetype:根据需求,参考APIrandom_number随机数字  -->

<!-- start:开始数字 -->

<!-- end:结束数字 -->

<!-- name:这个变量的名称  -->

<setdynvars sourcetype="random_number" start="1" end="40">

 <var name="rndint" />

</setdynvars>

<!-- repeat:定义一个循环,name:名称  -->

<repeat name="myloop">

<!-- transaction:定义一个事物,name:名称  -->

<transaction name="notifications_send">

<!-- request:定义一个请求,subst="true"是提交类型的请求  -->

<request subst="true">

<!-- http:定义一个http请求内容,根据自己的需求添加  -->

<http url='http://test.rest.msg.sdo.com:80/msg_statistics/%%_userid%%/new_count' content_type='application/json'  method='GET' contents=''>

<http_header name="EncType" value="application/json"/>

<http_header name="Mode" value="HTML"/>

</http>

</request>

</transaction>

<!-- until:定义一个循环的出口条件,这个变量rndint永远不会为0,为了让虚拟用户不停循环  -->

<until var="rndint" eq="0"/>

</repeat>

</session>

</sessions>

注意:如果没有组合脚本的存在,也可以将此脚本写入session内,将脚本变量替换掉。

在图像界面的操作系统tsung 采用了巧妙的录制  http proxy 默认使用 firefox 使用(推荐),所有这个  http 动作都会被记录下来,测试时可以这些步骤来产生请求。

tsung stop_recorder

完了,会得到一个  tsung.xml 之中

增加http请求脚本示例:

<session name="http_send" probability="100" type="ts_http">

 

<setdynvars sourcetype="random_number" start="01" end="50">

 <var name="rndint" />

</setdynvars>

 

<for from="1" to="800000" var="i">

<transaction name="queryWalletBalance">

 

<request subst="true">

<http  url="http://10.130.70.13:8089/mpay/queryWalletBalance.do" method="POST"  version="1.1"  contents="userId=deng0000%%_rndint%%&amp;userIdType=1&amp;spId=0&amp;appId=10&amp;businessCode=196&amp;costType=107&amp;queryMode=01&amp;eventTimestamp=20110304111111&amp;signMethod=1&amp;sign=32534535">  </http>

</request>

<thinktime value="0.1" random="true"></thinktime>

 

</transaction>

</for>

</session>

<load>标签

duration:持续时段,填数字即可,单位是API

800,如过机器配置好,可自己调试最佳参数,有效单位300个虚拟用户,实际执行情况可能超过,也可能达不到,需要根据调试得到最佳参数

<!-- 负载场景设置 -->

<load>

<!--   1阶段,持续10分钟,每秒2个用户  -->

<arrivalphase phase="1" duration="10" unit="minute">

<users interarrival="2" unit="second"></users>

</arrivalphase>

<!--   2阶段,持续10分钟,每秒1个用户  -->

<arrivalphase phase="2" duration="10" unit="minute">

<users interarrival="1" unit="second"></users>

</arrivalphase>

<!--   3阶段,持续10分钟,每秒10个用户  -->

<arrivalphase phase="3" duration="10" unit="minute">

<users interarrival="0.1" unit="second"></users>

</arrivalphase>

<!--   4阶段,持续10分钟,每秒10个用户  -->

<arrivalphase phase="4" duration="10" unit="minute">

<users arrivalrate="10" unit="second"></users>

</arrivalphase>

</load>

为了保证压力传递的参数,我们在执行的时候需要分析请求是否正确,首先设置

dumptraffic="true"

注:切记不可忘记调试完成改回tsung start

>>Starting Tsung

logs目录tsung.dump

例如 ~/.tsung/log 目录会生成一个以时间命名的目录,进入这个目录

/usr/local/lib/tsung/bin/tsung_stats.pl

查看目录内生成的ssh登录

linux下可以用用/私钥对,下面以A(192.168.1.155)A通过B

A机下生成公钥

[chenlb@A ~]$ ssh-keygen -t rsa -P ''

-P '' 就表示空密码,也可以不用-P就一次回车。/home/chenlb下生成.ssh下有id_rsa.pub

  1. 2.id_rsa.pub复制到B机的scp复制。

代码[chenlb@A ~]$ scp .ssh/id_rsa.pub    

id_rsa.pub                                    100%   223      0.2KB/s    00:00  

chenlb@192.168.1.181:/home/chenlb/id_rsa.pub

id_rsa.pub                                    100% 223     0.2KB/s   00:00

由于还没有免密码登录的,所以要输入密码。

  1. 3.B机把从id_rsa.pub添加到

[chenlb@B ~]$ chmod 600 .ssh/authorized_keys  

[chenlb@B ~]$ chmod 600 .ssh/authorized_keys

600

  1. 4.A机登录

The authenticity of host '192.168.1.181 (192.168.1.181)' can't be established.   

Are you sure you want to continue connecting (yes/no)? yes   

Last login: Thu Jul   3 09:53:18 2008 from chenlb   

[chenlb@A ~]$ ssh 192.168.1.181

RSA key fingerprint is 00:a6:a8:87:eb:c7:40:10:39:cc:a0:eb:50:d9:6a:5b.

Warning: Permanently added '192.168.1.181' (RSA) to the list of known hosts.

[chenlb@B ~]$

yes,现在B机了。登录的机子可有私钥,被登录的机子要有登录机子的公钥。这个公钥rsa算法的公钥dsa(对应的文件是id_dsa.pub),想让B机无密码互登录,那 

  • 配置/etc/hosts中配置机器之间的名字解析/etc/hosts代码

代码127.0.0.1        localhost     

  1. 10.0.0.52        sl52   

所有的机器都要有类似这样的配置

  • ,在这个文件中指定所有的  Tsung.xml代码

<client host="s252" weight="2" maxusers="800">      

</client>      

<ip value="10.0.0.135"></ip>      
</client>   

tsung集群的所有机器上都装有tsung.xml就行了,其它机器只要满足无密码提示的ok,然后在控制机器上运行

log目录下,除了在配置文件中,其它过程根本不需要管其它机器的,它们只要开着并联网就行。

根据tsung会在集群其它机器上自动启动tsung集群的机器间自动分配压力测试,每个机器上可能会有一个或多个tsung达不到指定的压力,这时

启动

Host key verification failed

这是因为ip地址)互相登陆,解决办法是通过主机名(而不是ssh登录,例子如下,.ssh/known_hosts文件中记下主机名的登录

ssh gserver135 

本机要修改默认端口22

vi /etc/ssh/sshd_config

/etc/rc.d/init.d/sshd restart  重新启动SSH服务器

常见的问题

l  设置的client端不支持22端口创建性能实例,需要调整本机默认端口为22,然后设置密钥,如果不想这么麻烦,可以使用参数:

<client host="mymachine"use_controller_vm="true">

l  其他

<FONT style="FONT-SIZE: 12px" color="black" face=""">

如果生成报表报错


© 著作权归作者所有

共有 人打赏支持
今幕明
粉丝 45
博文 224
码字总数 39350
作品 0
朝阳
程序员
tsung启动顺序

tsung启动使用到了erlang的application中的startphases方法。 在tsung的启动脚本中: $ERL $ERLOPTS $ERLRSH -noshell $PROTODIST $NAMETYPE $CONTROLLER -setcookie $COOKIE -s tsung_cont......

格通 ⋅ 2016/03/04 ⋅ 0

TSung测试XMPP协议--环境搭建

1.安装erlang wget http://www.erlang.org/download/otpsrcR15B.tar.gz tar zvxf otpsrcR15B.tar.gz cd otpsrcR15B ./configure --prefix=/opt/lsmp/openfire/erlang 安装目录 make make in......

古月楼 ⋅ 2013/10/09 ⋅ 1

Tsung压力测试工具的搭建和使用,配置。

具体Tsung工具的应用是,模拟用户对某平台的访问,其中可以产生自定义数量的虚拟用户,当Tsung start启动后,虚拟用户产生,模拟访问测试的平台,得到压力数据,在平台生产和设计过程中查漏补...

射手Mr吴 ⋅ 2016/02/16 ⋅ 0

压力测试工具tsung用法简介

tsung是用erlang开发的一款简单易用的压力测试工具,可以生成成千上万的用户模拟对服务器进行访问。目前对tsung的理解也仅限于会简单的应用,其内部结构没有深入研究过。 1、安装 tsung是用e...

今幕明 ⋅ 2014/07/26 ⋅ 0

压力测试工具tsung用法简介

本文为原创,转载请注明出处 tsung是用erlang开发的一款简单易用的压力测试工具,可以生成成千上万的用户模拟对服务器进行访问。目前对tsung的理解也仅限于会简单的应用,其内部结构没有深入...

今幕明 ⋅ 2014/06/23 ⋅ 0

TSung测试XMPP协议 集群配置

有的时候一台tsung机器压力太小,需要用到多台tsung机器来一起压力测试。这个时候就需要在多台服务器上面安装tsung和启动tsung已经tsung.xml文件。如果机器少还可以,没什么问题。那如果机器...

古月楼 ⋅ 2013/10/11 ⋅ 0

tsung测试tigase性能

tigase 性能测试,测试环境应用太多,只记录一个测试的方法; 具体性能可以参考官方的测试结果,而且有测试配置文件; http://www.tigase.org/content/tigase-load-tests-again-500k-user-co...

GREKI ⋅ 2014/04/03 ⋅ 1

关于Tsung,压力测试

@红薯 你好,想跟你请教个问题:centos5.5上跑的Tsung,软件是Tsung-1.3.3,用tsung-recorder记录了一些ecstore的下单流程,浏览器是火狐,问题是tsung.xml配置好了,脚本也放进去了,也能正...

嘉文四世 ⋅ 2013/07/11 ⋅ 1

Tsung 1.4.1 发布,压力测试工具

Tsung 是一个压力测试工具,可以测试包括HTTP, WebDAV, PostgreSQL, MySQL, LDAP, and XMPP/Jabber等服务器。针对 HTTP 测试,Tsung 支持 HTTP 1.0/1.1 ,包含一个代理模式的会话记录、支持 ...

小卒过河 ⋅ 2011/09/14 ⋅ 0

Tsung 1.5.1 发布,压力测试工具

Tsung 1.5.1 发布,此版本添加了新的 MQTT 插件;the possibility of varying popularities of sessions in phases;添加了 SSL 身份验证的客户端证书;系统改进和 bug 修复。 Tsung 是一个压...

oschina ⋅ 2014/04/12 ⋅ 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周三乱弹 —— 这样的女人私生活太混乱了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 胖达panda :你经历过体验到人生的大起大落吗?我一朋友在10秒内体验了,哈哈。@小小编辑 请点一首《almost lover》送给他。 《almost love...

小小编辑 ⋅ 41分钟前 ⋅ 7

自己动手写一个单链表

文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源。 一、概述 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对...

公众号_好好学java ⋅ 46分钟前 ⋅ 0

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 今天 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 2

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部