当前位置: 首页 > 工具软件 > Tsung > 使用案例 >

【Tsung学习】Tsung.xml配置文件

吕霄
2023-12-01

Tsung.xml配置文件

1.文件结构

默认的编码是UTF-8。你可以使用不同的编码,如:

<?xml version="1.0" encoding="ISO-8859-1"?>

Tsung标签的场景

<?xml version="1.0"?><!DOCTYPE tsung SYSTEM <tsung loglevel=>

...</tsung>

如果您添加属性 dumptraffic ="true",所有的流量将被记录到一个文件。

Warning

this will considerably slow down Tsung, so use with care. It is useful for debugging purpose. You can use the attribute dumptraffic=”light” to dump only the first 44 bytes.(这将会大大减缓Tsung,因此需要小心使用,用于调试,您可以使用属性 dumptraffic ="光"来转储,只有第一次是 44 个字节。)

1.4.0 版本以后,使用 dumptraffic=”protocol“在具体的日志中记录每个协议。目前只支持 HTTP ︰ 在 CSV 文件中记录所有请求,包含下列数据 ︰

#date;pid;id;http method;host;URL;HTTP status;size;duration;transaction;match;error;tag

领域

描述

date

请求结束时间(自1970-01-01 00:00:00 UTC秒)

pid

Erlang进程

id

Tsung用户ID

host

服务器主机名

URL

URL(相对)

HTTP

HTTP响应状态的状态(200,304,等)

size

响应的大小(以字节为单位)

duration

请求的持续时间(毫秒)

transaction

事件的名称(如果有)

match

如果match是在请求定义:match|nomatch(最后<match >如果定义了几个)

error

HTTP错误的名字(或空)

tag

如果请求被标记即为标签名,否则是空标签

警告:一般情况下 (几个Tsung客户端使用),生成的文件将不进行排序,所以你可能需要分析后再进行排序。

重负荷测试 (每秒数万名请求),协议日志记录可能过载的控制器。这种情况,可以改用 protocol_local。日志文件被写入本地的从属机,需要在测试结束后手动合并日志。

日志级别也可以在性能上产生很大的影响 ︰ 负荷过高时需要提出警告。

可能的值有 ︰emergency紧急,critical关键,error错误,warning警告,notice (default)通知 (默认值),info信息,debug调试

为了详细日志记录,调试和设置日志级别对Tsung重新编译再进行调试。

2.客户端与服务器

客户端与服务器的定义

2.1.基本设置

对于非分布式负载,基本的设置如下︰

<clients>

  <client host="localhost" use_controller_vm="true"/></clients>

<servers>

  <server host="192.168.1.1" port="80" type="tcp"></server></servers>

在同一主机和Erlang 虚拟机上启动负载作为控制器。

服务器是群集的入口,可以添加多个服务器,默认情况下每个服务器权重为1,每个会话可以按权重选择任一服务器。可以为每个服务器设置权重(权重可以是整数或浮点数)︰

<servers>

  <server host="server1" port="80" type="tcp" weight="4"></server>

  <server host="server2" port="80" type="tcp" weight="1"></server></servers>

(在 1.5.0 版以后,未实现选择权重,循环算法用来选择服务器)。

类型可以是 tcp、 ssl、 udp (对于 IPv6,使用 tcp6,ssl6 或 udp6; 只有在版本 1.4.2中可以更新和使用) 或 websocket (仅限在 1.5.0 版中可以更新和使用))

这也是一个特定的BOSH类型 ︰ bosh加密的BOSH,和 bosh_ssl 的加密连接

2.2.高级设置

下一个示例是更复杂的分布式测试及几个先进功能的展示 ︰

<clients>

  <client host="louxor" weight="1" maxusers="800">

    <ip value="10.9.195.12"></ip>

    <ip value="10.9.195.13"></ip>

  </client>

  <client host="memphis" weight="3" maxusers="600" cpu="2"/></clients>

<servers>

  <server host="10.9.195.1" port="8080" type="tcp"></server></servers>

可以通过几个虚拟 IP 来模拟更多的机器。负载平衡器通过客户端的 IP 分配服务器群集之间的通信流量是非常有用的。1.1.1 中的新增功能 ︰ IP 不再是强制性。如果未指定,将使用默认的 IP。

1.4.0新增︰使用 <ip scan="true"value="eth0"/> 来扫描给定接口上的所有 IP 别名 (此示例中的 eth0)。

在此示例中,第二台机器用于Tsung群集,拥有更高的权重和 2 个cpu。两个Erlang 虚拟机将用于占用CPU的数目。

注意:即使 Erlang VM 现在能够处理几个 Cpu (erlang SMP),评测表明,使用一个虚拟机可以更有效地应对Tsung客户端,每个 CPU (SMP 禁用)。只有控制器节点采用SMP erlang。因此,cpu 数应该等于核心节点的数量。如果你喜欢使用 erlang SMP,添加-s 选项来启动Tsung (和不在配置文件中设置 cpu)。

默认情况下,负载在所有 CPU (默认情况下一个客户端对应一个 CPU) 上是均匀的分布。权重值 (整数) 可以用于考虑到客户端机器的速度。例如,如果一个客户端权重为 1 、其他客户端的权值为 2,第二次启动的用户数将是第一次的两倍(所占比例为1/3 和 2/3)。在前面的示例中的第二个客户端有2个CPU、权重为3,则每个CPU的权重为1.5。

Maxusers 参数用于避开由单一进程开启嵌套最大数量的限制 (默认情况下1024上有很多OS ) 和缺乏选择的系统调用的可伸缩性。高于限制的用户数目时,将启动一个新的 erlang 虚拟机来处理新的用户。Maxusers 的默认值是 800。启用内核投票,用于 maxusers (例如 30000) 并且不影响性能的一个非常大的值 (但是别忘了OS的上限,ulimit-n,请参阅为什么没有 error_connect_emfile 错误?)。

注意:是否您使用Tsung主从式,主机的方法分发给从机。如果会话包含数个请求,从机将按顺序执行每个这些请求。

2.3.通过作业调度程序运行Tsung

Tsung能够为客户端提供一个批处理/作业调度器的节点列表。它目前处理 PBS/力矩,LSF 和OAR。设置 type 属性为batch即可实现此功能,例如 ︰

<client type="batch" batch="torque" maxusers="30000">

浏览节点上的IP 别名来获得批调度器,使用 scan_intf 如下 ︰

<client type="batch" batch="torque" scan_intf='eth0' maxusers="30000">

3.监测

Tsung能够通过远程代理程序用几个后端监控远程服务器进行通信。这在 <monitoring>部分中进行配置。现有的统计数据是 ︰ CPU 活动、 平均负载和内存使用情况。

注意,可以通过监控任务管理器获得节点 ︰

<monitor batch="true" host="torque" type="erlang"></monitor>

支持以下几种类型的远程代理 (erlang 是默认值) ︰

3.1.Erlang

通过Tsung启动远程代理。使用 erlang 通信来检索统计信息的服务器的活动。例如,下面是监测定义基于 Erlang 代理商,为6台计算机的群集 ︰

<monitoring>

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

  <monitor host="bigfoot-1" type="erlang"></monitor>

  <monitor host="bigfoot-2" type="erlang"></monitor>

  <monitor host="f14-1" type="erlang"></monitor>

  <monitor host="f14-2" type="erlang"></monitor>

  <monitor host="db" type="erlang"></monitor></monitoring>

注意:受监控的计算机要能够联网,必须允许 erlang 通信 (没有任何防火墙更好)。SSH (或 rsh) 需要配置为允许无密码连接上。否则可能无法正常工作,必须使用相同版本的 OTP !

如果不能在远程服务器上安装erlang,可以使用其他可用的代理。

1.5.1 版本中的新增功能。

erlang 可用来监视与 mysqladmin与mysql 数据库。使用方法如下︰

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

 <mysqladmin port="3306" username="root" password="sesame" /></monitor>

速率统计︰mysql线程和问题(查询)的数目。

3.2.SNMP

如果 SNMP 监控是首选,那么关键字 snmp 可以取代 erlang 关键字。他们可以混合使用。1.2.2版后,可以自定义 SNMP 版本、 群落和端口号。使用管理信息基础 (MIB) 中网 snmp 提供(参见 

http://tsung.erlang-projects.org/user_manual/faq.html#sec-faq-snmp-label)。

<monitoring>

  <monitor host="geronimo" type="snmp"/>

  <monitor host="f14-2" type="erlang"></monitor>

  <monitor host="db" type="snmp">

    <snmp version="v2" community="mycommunity" port="11161"/>

  </monitor></monitoring>

默认版本是 v1,默认群落是public、默认端口是161。

1.4.2版后,可以自定义从 SNMP 服务器,使用一个或多个 oid 元素检索的对象标识符 (OID):

<monitor host="127.0.0.1" type="snmp">

  <snmp version="v2">

    <oid value="1.3.6.1.4.1.42.2.145.3.163.1.1.2.11.0"

         name="heapused" type="sample" eval="fun(X)-> X/100 end."/>

  </snmp></monitor>

类型可以是样品、 计数器或款项,也可以选择定义 (使用 erlang 语法) 函数应用值 (eval 属性)。

3.3.Munin

新版本 1.3.1 中。

Tsung可以从 munin 代理检索数据节点 (见 

http://munin-monitoring.org/wiki/munin-node)。类型关键字必须设置为 munin,例如 ︰

<monitoring>

  <monitor host="geronimo" type="munin"/>

  <monitor host="f14-2" type="erlang"></monitor></monitoring>

4.定义荷载的进展

4.1.随机生成的用户

负载进程通过定义几个阶段点来设置 ︰

<load>

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

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

  </arrivalphase>

 

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

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

  </arrivalphase>

 

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

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

  </arrivalphase></load>

详细设置,在测试的前10分钟,将以每 2 秒的速度创建一个新的用户,10 分钟之后,将以每一秒的速度创建一个新的用户,在最后的 10 分钟,将每一秒创建10 个用户。所有用户都结束他们的会话时即完成测试。

还可以使用 arrivalrate 而不是间隔。例如,如果你想每秒创建10 个用户,可以使用︰

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

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

可以在每个阶段开始时通过 maxnumber 属性限制用户数量,如下︰

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

  <users maxnumber="100" arrivalrate="10" unit="second"></users></arrivalphase><arrivalphase phase="2" duration="10" unit="minute">

  <users maxnumber="200" arrivalrate="10" unit="second"></users></arrivalphase>

在这种情况下,第一阶段只能创建100 个用户,第二阶段可以创建200 多个用户。

可以多次执行循环语句来加载出完整的序列 (loop = '2' 时,循环将被执行2次,所以完整的负载将执行 3 次) (1.2.2版后此功能可用)。

生成的 HTTP 请求的负载 / 秒也取决于会话内请求的平均数量 (如果每个会话有 100 个请求和 每秒平均生成10 个新用户,理论平均吞吐量将达到 1000 个请求 / 秒)。

1.5.1 版本中的新增功能。

还可以重写会话内某一特定的阶段,设置 session_setup  ︰

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

  <session_setup name="http_test_1" probability="80"/>

  <session_setup name="fake"        probability="20"/>

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

4.2.静态生成的用户

如果你想要开启一个给定的会话 (请参阅

http://tsung.erlang-projects.org/user_manual/conf-sessions.html#sessions-label) 在给定时间在测试期间,1.3.1版之后:

<load>

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

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

  </arrivalphase>

  <user session="http-example" start_time="185" unit="second"></user>

  <user session="http-example" start_time="10" unit="minute"></user>

  <user session="foo" start_time="11" unit="minute"></user></load><sessions>

  <session name="http-example" probability="0" type="ts_http">

    <request> <http url="/" method="GET"></http> </request>

  </session>

  <session name="foobar" probability="0" type="ts_http">

    <request> <http url="/bar" method="GET"></http> </request>

  </session>

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

    <request> <http url="/" method="GET"></http> </request>

  </session><sessions>

在此示例中,我们有两个会议,一个是"0"的概率 (因此将不会使用在第一阶段),和其他 100%。我们定义 3 个用户开始分别在 3mn 和 5 秒后开始测试 (使用 http 示例会话),另一个启动10 分钟后,11 分钟后启动下次(使用 foo 会话)。

1.5.1 版本中的新增功能。

如果你想要一次开启几个会话,并且会话的名称具有相同的前缀,则可以使用通配符。鉴于前几届会议,此示例将启动两个用户 (一个与美孚会话),一个与 foobar 会话在开始时间 +10s。

<user session="foo*" start_time="10" unit="second"/>

4.3.负载测试的持续时间

默认情况下,所有用户已经都完成会话时Tsung才能结束。因此它可以比 arrivalphases 的持续时间更长的时间。如果你想要在给定的时间段 (即使未完成或者一些会话仍在活动) 后停止Tsung,可以在加载时设置有效期属性(1.3.2版中新增的功能) ︰

<load duration="1" unit="hour">

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

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

  </arrivalphase></load>

目前,有效期的最大值是50 天。单位可以是秒,分钟或小时。

5.设置选项

5.1.thinktimes,SSL,缓冲区

5.2.TCP连接超时

5.3.重载与超时

5.4.确认消息而超时

5.5.Hibernate

5.6.rate_limit

5.7.ports_range

5.8.设置为随机数种子

5.9.BOSH路径

5.10.WebSocket的选项

5.11.XMPP/Jabber选项

5.12.HTTP选项

5.13.AMQP选项

6.协议

6.1.thinktimes

6.2.超文本传输协议

6.3.Jabber/XMPP

6.4.PostgreSQL

6.5.MySQL

6.6.WebSocket

6.7.AMQP

6.8.MQTT

6.9.LDAP

6.10.会话型混合

7.新增的功能

7.1.动态替换

7.2.读取外部文件

7.3.动态变量

7.4.检查服务器的响应

7.5.Loops,If,Foreach

7.6.速率限制

7.7.故障排除

7.8.客户端证书

 

 类似资料: