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.客户端证书