前言
上一篇进行了tsung的安装并演示了样例,本文会对样例中涉及到的配置参数进行详细说明。当然,除此之外,也会对测试报告进行解读。
tsung文档说明
tsung的测试用例是使用xml定义的,这里先贴出最xml文件结构并对其进行说明。官方文档:
tsung.erlang-projects.org/user_manual…
文件结构
<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<!--顶级标签-->
<tsung loglevel="notice" version="1.0">
<!--客户端标签-->
<clients>
</clients>
<!--服务端标签-->
<servers>
</servers>
<!--监控标签-->
<monitoring>
</monitoring>
<!--负载标签-->
<load>
</load>
<!--选项标签-->
<options>
</options>
<!--过程标签-->
<sessions>
</sessions>
</tsung>
文件编码
默认的文件编码是utf-8,可以如下指定
<?xml version="1.0" encoding="ISO-8859-1"?>
顶级标签<tsung>
<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<!--顶级标签-->
<tsung loglevel="notice" version="1.0">
</tsung>
参数说明:
- dumptraffic:true:所有的通信都会被记录,注:这会大大降低tsung速度,一般是用于调试;light:只转储前44字节
- loglevel: 日志级别,emergency/critical/error/warning(推荐)/notice (默认)/info/debug(需要察看详细信息时,注:使用这个属性时要用make debug重新编译tsung)
客户端标签<clients>
-
基础设置:
<clients> <client host="localhost" use_controller_vm="true" maxusers="3000"/> </clients>
这将在与控制器相同的主机和同一Erlang虚拟机上启动加载。
-
高级设置
<clients> <client host="tsung-node1" weight="1" maxusers="800"> <ip value="192.168.1.100"></ip> <ip value="192.168.1.101"></ip> </client> <client host="tsung-node2" weight="3" maxusers="600" cpu="2"/> </clients>几个虚拟IP可以用来模拟更多的机器。当负载平衡器使用客户机的IP在服务器集群之间分配流量时,这非常有用。其实也是突破单个主机端口范围为
1024 ~ 65535的方式。或N个IP,理论可对外建立连接数为:N*(65535-1024 )在这个例子中,Tsung集群中使用了第二台机器,具有更高的权重和2个cpu。将使用两个Erlang虚拟机来利用CPU的数量。
经测试,如果host不是localhost,需要去
/etc/hosts进行配置,并且要求能够用私钥ssh到本机,并且成功连通一次,留下记录在~/.ssh/known_hosts上。192.168.1.111 tsung-node1 192.168.1.112 tsung-node2上面的多个IP,需保证能正常的分配流量,即外面可以通过多个IP访问同一台主机。这里贴一下配置。
[root@localhost test]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=eth0 UUID=a5b45d89-c03a-4742-ac5f-dd4480eff933 DEVICE=eth0 ONBOOT=yes IPADDR=192.168.1.100 IPADDR1=192.168.1.101 IPADDR2=192.168.1.102 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8 DNS2=8.8.4.4可配置多个静态IP,IPADDR/IPADDR1/IPADDR2
参数说明:
- weight: 节点上面用户的比例,一般设置为1即可
- maxusers: 默认值为800,一般设置为800,3000即可,根据机器配置来设置大小
- cpu: 根据机器硬件配置来设置,如果是4核CPU,最佳设置为3,以此类推
- use_controller_vm=true与maxusers="3000"表示:如果客户端模拟生成的用户超过3000,则将开启一个新的erlang虚拟机(VM),一般maxusers设置为800-3000
服务端标签<servers>
<servers>
<server host="192.168.1.10" port="18080" type="tcp" weight="1"></server>
<server host="192.168.1.10" port="18081" type="tcp" weight="1"></server>
<server host="192.168.1.20" port="18080" type="tcp" weight="4"></server>
</servers>
参数说明:
-
host: 填别名,需要先去host文件配置
-
port: 填可用对外端口,一般8080
-
typeL:协议类型,tsung支持tcp/udp,根据自己的需要
-
weight: 服务器权重,默认1
监控标签<monitoring>
Tsung能够使用多个与远程代理通信的后端来监视远程服务器。这在<monitoring>部分中配置。可用的统计信息包括:CPU活动、平均负载和内存使用情况。
-
erlang
<monitoring> <monitor host="node1" type="erlang"></monitor> <monitor host="db" type="erlang"></monitor> </monitoring>受监控的计算机需要通过网络访问,并且必须允许erlang通信(没有防火墙更好)。SSH(或rsh)需要配置为允许在没有密码的情况下进行连接。必须在所有节点上使用相同版本的Erlang/OTP,否则它可能无法正常工作!
-
snmp
<monitoring> <monitor host="node1" type="erlang"/> <monitor host="db" type="snmp"> <snmp version="v2" community="mycommunity" port="11161"/> </monitor> </monitoring>如果首选snmp监视,则type关键字snmp可以替换erlang关键字。它们可以混合。
-
munin
略
负载标签<load>
-
样例一
<load> <arrivalphase phase="1" duration="10" unit="minute"> <users interarrival="2" unit="second"></users> </arrivalphase> </load>
使用此设置,在测试的前10分钟内(由duration和unit指定),将每隔2秒(由interarrival和unit指定)创建一个新用户。测试将在所有用户结束会话后结束。
-
样例二
<load> <arrivalphase phase="1" duration="10" unit="minute"> <users arrivalrate="10" unit="second"></users> </arrivalphase> </load>使用此设置,在测试的前10分钟内(由duration和unit指定),将每秒(unit指定)创建10个(由interarrival指定)新用户。测试将在所有用户结束会话后结束。
-
样例三
<load> <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> </load>这里多了个maxnumber参数,在这种情况下,第一阶段只会创建100个用户,而在第二阶段将创建200个用户。其中阶段由
phase指定,每个阶段创建用户数由maxnumber指定。 -
参数说明:
- phase:阶段,填数字即可,系统会按顺序执行,可是设置多个阶段组合场景
- duration:持续时段,填数字即可,单位是unit="minute"设置,是分钟也,可设置时/分/秒
- unit:时间单位可以是
second,minute或hour - arrivalrate:虚拟用户数,填写数字即可,一般最大800,如过机器配置好,可自己调试最佳参数,有效单位unit="second" 是秒,每秒虚拟300个虚拟用户,实际执行情况可能超过,也可能达不到,需要根据调试得到最佳参数
参数设置标签<options>
用于设置全局参数的。
<options>
<option name="thinktime" value="3" random="false" override="true"/>
<option name="ssl_ciphers"W
value="EXP1024-RC4-SHA,EDH-RSA-DES-CBC3-SHA"/>
<option name="tcp_snd_buffer" value="16384"></option>
<option name="tcp_rcv_buffer" value="16384"></option>
<option name="udp_snd_buffer" value="16384"></option>
<option name="udp_rcv_buffer" value="16384"></option>
</options>
可以指定建立TCP连接的超时时间(毫秒)。默认值是无穷大。
<option name="connect_timeout" value="5000" />
您还可以全局启用TCP REUSEADDR选项:
<option name="tcp_reuseaddr" value="true" />
您可以指定Tsung尝试重试的次数。默认值为3。
<option name="max_retries" value="5" />
用于设置空闲超时(用于“parse”和“local”ack)和全局ack超时(用于“global”ack)。默认情况下,空闲超时为10分钟(600000),全局确认超时为无穷大。此值可以这样更改:
<option name="idle_timeout" value="300000"></option>
<option name="global_ack_timeout" value="6000000"></option>
hibernate选项用于减少模拟用户在thinktimes期间的内存消耗。默认情况下,thinktimes超过10秒时将激活休眠。此值可以这样更改:禁用为infinity
<option name="hibernate" value="5"></option>
您可以限速-带宽
<option name="rate_limit" value="1024"></option>
指定端口范围:不建议
<option name="ports_range" min="1025" max="65535"/>
特殊参数:如http请求头
<option type="ts_http" name="user_agent">
<user_agent probability="80">
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050513 Galeon/1.3.21
</user_agent>
<user_agent probability="20">
Mozilla/5.0 (Windows; U; Windows NT 5.2; fr-FR; rv:1.7.8) Gecko/20050511 Firefox/1.0.4
</user_agent>
</option>
会话标签<sessions>
定义请求会话的。
- 样例一
<sessions>
<session name="http-example" probability="100" type="ts_http">
<transaction name="hello">
<request subst="true">
<http url="/" method="GET">
</http>
</request>
</transaction>
</session>
</sessions>
这里定义了一个会话,会话名称为http-exameple,请求权重为100,请求类型为http。
tsung统计报告
一些常用的名称解析:
- request:每个请求的反应时间
- page:每一系列请求的反应时间(a page是一组不包含think-time的一组请求)
- connect:连接建立用的时间
- reconnect:重新连接的次数
- size_rcv:反应的大小(单位是byte)
- size_sent:请求的大小(单位是byte)
- session:用户会话时间
- users:同步用户数
- connected:同步连接用户数
主要统计信息
Tsung统计数据是平均每十秒重置一次,所以这里的响应时间(连接、请求、页面、会话)是指每十秒的平均响应时间。
-
connect:每个连接持续时间
统计项 说明 Hightest 10sec mean 连接最长持续时间 Lowest 10sec mean 连接最短持续时间 Highest rate 每秒最高建立连接速率 Mean 平均每个连接持续时间 Count 总连接数 -
page:每个请求集合的响应时间,(一个页面表示一组没有被thinktime间隔的请求)
-
request: 表示 每个请求的响应时间
统计项 说明 Hightest 10sec mean 请求最长响应时间 Lowest 10sec mean 请求最短响应时间 Highest rate 请求最快发送速率 Mean 平均每个请求响应时间 Count 总请求数 -
session: 表示 每个用户会话持续时间
统计项 说明 Hightest 10sec mean 会话最长持续时间 Lowest 10sec mean 会话最短持续时间 Highest rate 每秒最高进行会话速率 Mean 平均每个会话持续时间 Count 总会话数
事务统计
网络吞吐量
size_rcv: 表示 响应请求数据量
size_sent:表示 发送请求数据量
| 统计项 | 说明 |
|---|---|
| Hightest rate | 每秒最高 响应/发送 请求数据量 |
| Total | 响应/发送 请求总数据量 |
计数统计
| 统计项 | 说明 |
|---|---|
| connected | 表示会话开始且尚未结束,并且已建立连接的最大用户数 |
| finished_user_count | 表示已经完成会话的最大用户数 |
| users | 表示会话开始且尚未结束的最大用户数 |
| users_count | 表示Tsung总共生成的用户总数 |
错误统计
| 统计项 | 说明 |
|---|---|
| Error_abort_max_conn_retries | 重新尝试连接错误 |
| Error_connect_timeout | 连接超时错误 |
| Error_connect_nxdomain | 不存在的域错误 |
| Error_unknown | 位置错误 |
| Highest rate | 发生错误最高速率 |
| Total number | 发生该错误总个数 |
服务监控
http返回状态码统计
200:表示客户端请求已成功响应
| 统计项 | 说明 |
|---|---|
| Highest rate | 状态码返回最高速率 |
| Total number | 返回状态码的总个数 |
统计图
小结
本文主要是对tsung常用配置进行说明,并对一些统计指标进行介绍,下一篇开始进行实战。