高并发压力测试工具Tsung

 2018-03-29 19:38:23     Tsung  测试工具   707


导读: Tsung是Erlang开发的一个开源的多协议分布式负载测试工具,它能用来压力测试HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP 和 Jabber/XMPP的服务器。它可以分布在多个客户机,并能够模拟成千上万的虚拟用户数并发。

最近在做业务的横向扩展测试和业务接口的性能优化,期望QPS能达到C100K的目标。平时简单的压力测试,使用的是 ab 轻量级测试工具。但是,正式测试时,涉及到多接口、高并发等要求测试,就需要使用专业的、重量级的测试工具。如:Loadrunner、Jmeter、Tsung等。由于Loadrunner主要在Windows下使用,部署集群不太方便,这里选择了Tsung。

1、服务器部署说明


Host IP 说明
nginx01 192.168.0.1 反向代理,上游是 Tomcat 服务
tsung01 192.168.0.2 压测机,Tsung master
tsung02 192.168.0.3 压测机,Tsung slave
tsung03 192.168.0.4 压测机,Tsung slave
tsung04 192.168.0.5 压测机,Tsung slave

在所有的压测机上 /etc/hosts 增加域名配置。

192.168.0.1    nginx01
192.168.0.2    tsung01
192.168.0.3    tsung02
192.168.0.4    tsung03
192.168.0.5    tsung04

2、安装


这里的操作以 CentOS 为例。

安装之前,需要先在所有压测机上安装以下软件包。

yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel libtool libtool-ltdl-devel

安装Erlang

由于 TsungErlang 开发的,所以,需要在所有的压力机上安装 Erlang,在官网找到适用版本的下载地址进行下载。

wget http://erlang.org/download/otp_src_20.3.tar.gz

tar -zxvf otp_src_20.3.tar.gz

cd otp_src_20.3

./otp_build autoconf  
./configure  
make  
make install

修改环境变量 /etc/profile

export ERLANG_HOME=/usr/local/lib/erlang  
export PATH=$PATH:$ERLANG_HOME/bin

让修改的环境变量生效。

source /etc/profile

安装Tsung

Tsung官网 找到最新的版本进行下载,安装在所有的压测机上。

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

tar -zxvf tsung-1.7.0.tar.gz

cd tsung-1.7.0

./configure

make && make install

Tsung 加到环境变量中。

export TSUNG_HOME=/usr/local/lib/tsung
export PATH=$PATH:$TSUNG_HOME/bin

/usr/local/share/doc/tsung/examples 目录下,有官方的 tsung.xml 配置模板。可以根据情况进行修改。

一般,先在 /root 路径下创建 .tsung 目录。然后,将 tsung.xml 模板拷贝到该目录下。

tsung01 上进行以下操作。测试 Tsung 是否可用。

 cp /usr/local/share/doc/tsung/examples/http_simple.xml /root/.tsung/

修改 http_simple.xml 内容。

<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/local/share/tsung/tsung-1.0.dtd">
<tsung loglevel="notice" version="1.0">

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

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

    <monitoring>
        <monitor host="myserver" type="snmp"></monitor>
    </monitoring>

    <load duration="5" unit="minute">
        <arrivalphase phase="1" duration="5" unit="minute">
            <!--
                <users maxnumber="200" interarrival="1" unit="second"></users>
            -->
            <users maxnumber="200" arrivalrate="50" unit="second"></users>
        </arrivalphase>
    </load>

    <options>
        <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>
    </options>

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

            <for from="1" to="10000" var="i">
                <request>
                    <http url="/api/user/test?uid=12345" method="GET" version="1.1"></http>
                </request>
            </for>
        </session>
    </sessions>
</tsung>

启动 Tsung

tsung -f ~/.tsung/http_simple.xml start

或者

tsung start #默认使用的是/root/.tsung/tsung.xml

执行完成后,会在 /root/.tsung/log/ 目录下生成压测结果文件。例如:20180327-1216。

tsung.xml 的配置和使用,可以参考官网文档Tsung文档说明

安装Template Toolkit

Tsung 生成的压测数据不便于阅读,需要将其转换成丰富的报表。这时,需要用到 Template Toolkit。在 tsung01 一台服务器上安装即可。

首先,安装 Template Toolkit 依赖的软件包。

yum -y install gnuplot perl5 perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker

然后,在Template Toolkit官网找到下载地址,进行下载安装。

wget http://cpan.org/modules/by-module/Template/Template-Toolkit-2.26.tar.gz

tar -zxf Template-Toolkit-2.26.tar.gz

cd Template-Toolkit-2.26

perl Makefile.PL

make 

make test 

make install

在执行 make test 时,可能会提示错误信息。可以先不忽略,直接 make install。如果安装成功,就没有问题。

生成测试报告

#在 ~/.tusng 下创建 html 目录
cd /root/.tsung

mkdir html

mkdir 20180327-1216

cd 20180327-1216

tsung_stats.pl --stats ~/.tsung/log/20180327-1216/tsung.log

20180327-1216 目录下载到本地,就可以查询详细的测试报告。点击查看测试报告

3、集群测试


Tsung 的集群测试使用十分简单,只需要在主节点上执行操作,所有从节点会自动执行,不用去干预。这涉及到打通主从节点的通讯问题(基于Erlang的通讯)。

尝试过基于 SSH 的免密钥方式,很容易出现问题,不是很方便。最后找到一种很方便的方式,使用 tsung_rsh 工具。

首先,要确保所有压测机的服务器名称与域名保持一致。可以采用临时修改服务器名称的方式。也可以采用修改 /etc/hosts,把服务器名称当作域名(前提是每台服务器名称不一样)。

临时修改服务器名称。

#修改 tsung01 的服务器名称
hostname tsung01

#其他几台类似

然后,在所有的压测机上下载该工具。

cd /opt/apps/

git clone https://github.com/weibomobile/tsung_rsh.git

在所有的从节点压测机上启动守护进程 rsh_daemon.sh

sh rsh_daemon.sh -a tsung01 start

注意:

  • 不要修改监听端口的默认值19999,除非你想更改,那么不要忘记修改rsh_client.sh的PORT值
  • 如果内网之间有端口屏蔽的话,注意要开放 19999 端口。

在主节点上修改 tsung.xml 配置。主要是修改 <client>

  <clients>
    <client host="tsung02" weight="1" maxusers="200" cpu="3" >
    <ip value="192.168.0.3"/>
    </client>
    <client host="tsung03" weight="1" maxusers="200" cpu="3" >
        <ip value="192.168.0.4"/>
    </client>
    <client host="tsung04" weight="1" maxusers="200" cpu="3" >
    <ip value="192.168.0.5"/>
    </client>
  </clients>

  <monitoring>
    <monitor host="tsung02" type="erlang"></monitor>
    <monitor host="tsung03" type="erlang"></monitor>
    <monitor host="tsung04" type="erlang"></monitor>
  </monitoring>

最后启动。

tsung -r /opt/apps/tsung_rsh/rsh_client.sh -f /root/.tsung/tsung.xml start

完成压力测试后,生成测试报告,就可以进行分析了。查看集群测试报告

4、问题


采用集群测试时,可能会遇到生成的报表没有数据。这个问题很有可能是主从节点之间的通讯不畅导致的,也有可能是 tsung.xml 的参数设置的不合理。

具体的错误信息,可以查看日志文件 /root/.tusng/logs/20180327-1216/tsung_controller\@tsung01.log

可以采用以下方式验证主从节点之间的通讯。

erl -rsh /otp/apps/tsung_rsh/rsh_client.sh -sname foo -setcookie mycookie

Eshell V5.4.3 (abort with ^G)

(foo@myhostname)1>slave:start(remotehost,bar,"-setcookie mycookie").

remotehost 分别修改成从节点的域名tsung02、tsung03、tsung04进行测试。

如果返回 {ok,bar@remotehost}。说明通讯没有问题。否则,就说明通讯有问题,请检查该节点的 hostshostname


参考: