`
jzhihui
  • 浏览: 268396 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Tsung源码分析(二):Tsung压力生成过程

阅读更多

上一篇讲到ts_config_server:newbeams通过ts_launcher:launchts_launcher_static:launch启动本地和远程结点压力客户端,其中ts_launcher用于随机生成用户ts_launcher_static主要用于静态生成用户。这一篇详细的说明压力客户端是如何启动的。

         说明:压力客户端是指一个tsung应用,见TUNG_ROOT/src/tsung/tsung.erl

 

         newbeams会通过gen_server:cast/2调用回调函数ts_config_server:handle_cast/2,代码见下:

 

handle_cast({newbeams, HostList}, State=#state{logdir   = LogDir,
                                               hostname = LocalHost,
                                               config   = Config}) ->
    LocalVM  = Config#config.use_controller_vm,
    GetLocal = fun(Host)-> is_vm_local(Host,LocalHost,LocalVM) end,
    {LocalBeams, RemoteBeams} = lists:partition(GetLocal,HostList),
    case local_launcher(LocalBeams, LogDir, Config) of
        Id0 ->
            Seed=Config#config.seed,
            Args = set_remote_args(LogDir, Config#config.ports_range),
            {BeamsIds, LastId} = lists:mapfoldl(fun(A,Acc) -> {{A, Acc}, Acc+1} end, Id0, RemoteBeams),
            Fun = fun({Host,Id}) -> remote_launcher(Host, Id, Args) end,
            RemoteNodes = ts_utils:pmap(Fun, BeamsIds),
            ?LOG("All remote beams started, sync ~n",?NOTICE),
            global:sync(),
            StartLaunchers = fun(Node) ->
                                     ts_launcher_static:launch({Node,[]}),
                                     ts_launcher:launch({Node, [], Seed})
                             end,
            lists:foreach(StartLaunchers, RemoteNodes),
            {noreply, State#state{last_beam_id = LastId}}
end;

 

参数说明:

HostList代表要启动的压力客户端,这个主要由tsung配置文件中的clients段配置。client配置项中有一个cpu属性,当声明这个属性时,会根据cpu的数量生成多个压力客户端。比如:

 

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

只会生成一个压力客户端,而

 

 

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

则会生成两个压力客户端。

 

在调用local_laucher之前,GetLocal函数会将压力客户端分成LocalBeamsRemoteBeams,区分这二者的关键是use_controller_vm这个选项,只有这个选项为true时,GetLocal函数才会把与启动tsung结点相同的结点看作是LocalBeams,并通过local_launcher函数在启动tsungErlang虚拟机上,再启动一个压力客户端。否则,即使Host在启动tsung的结点上,也会被认为是RemoteBeam

set_remote_args设置用于启动远程压力客户端的参数,参数内容跟上一篇中tsung.sh使用的启动命令相似。

remote_launcher完成的功能很简单:通过slave:start/3启动远程压力客户端。slave:start/3函数通过Erlangport机制ssh到远程结点,并运行通过set_remote_args构建的命令来启动远程压力客户端。在erlangslave手册中,有如下描述:

The user must be allowed to rsh to the remote hosts without being prompted for a password.

这也是为什么在tsung用户手册的依赖那一节中,有如下要求:

for distributed tests, you need an ssh access to remote machines without password.

 

global:sync函数调用后,远程压力客户端算是启动完毕,但是实际的压力还没有生成。ts_launcher:launchts_launcher_static:launch启动实际的压力。这里只分析ts_launcher的实现。

ts_launcher:launch的代码如下: 

 

launch({Node, Arrivals, Seed}) ->
    ?LOGF("starting on node ~p~n",[[Node]], ?INFO),
    gen_fsm:send_event({?MODULE, Node}, {launch, Arrivals, Seed})

       Node:代表要启动的远程结点主机名;

       Arrivals:代码中传递的是空数组;

       Seed:随机数种子,默认是当前时间;

       gen_fsm:send_event调用会将事件发送到远程结点上,然后在远程结点上启动会话进程。

 

launch函数的调用栈:wait->wait_static->launcher

最终launcher通过调用do_launcher启动一个会话进程。do_launcher先通过ts_config_server:get_next_session拿到用户的session信息,然后通过ts_client_sup:start_c hild启动一个会话进程(实际与测试服务器会话还要等一个timer过期会才会真正触发)

一个会话进程成功启动后,通过change_phase调用确定是在当前phase再继续启动会话进程,还是进入下一个启动phase

至于一个phase到底启动多少个会话进程,这是由tsung配置文件中load节的arrivalpahse来定义的,根据每个phase配置的每毫秒用户到达速度(两种配置方式:interarrivalarrivalrate,解析时会转换成每毫秒速度)及持续时间来确定(这个值同时受到该phase最大启动会话的限制)。但是最终启动的会话可能不会精确的与这个值相同,这主要是因为生成会话进程的过程本身也会对tsung的控制器产生压力,导致当phase的持续时间已经用完时,期望的会话进程数量还没有达到。

 

当所有phase的会话都已经启动完毕后,等待所有会话进程完成会话。

分享到:
评论

相关推荐

    tsung1.6.0

    6. **分析结果**:Tsung会生成详细的日志文件,可以使用`tsung stats`生成统计报告,帮助分析系统在测试过程中的表现。 总的来说,Tsung 1.6.0提供了一套全面的负载测试解决方案,对于评估和优化系统性能、容量规划...

    MQTT压力测试之Tsung的使用

    MQTT压力测试之Tsung的使用 MQTT压力测试之Tsung的使用

    Tsung安装使用详细解说

    接着,通过以下命令安装Tsung: ```bash sudo apt-get install tsung ``` ## 2. 使用Tsung注册用户 Tsung支持通过XML配置文件来定义测试场景。为了测试Openfire的注册功能,你可以从`tsung/examples`目录下复制一...

    tsung里面测试websocket的插件

    5. **分析报告**:测试结束后,分析生成的报告,找出性能瓶颈,优化服务。 **总结** Tsung提供的WebSocket插件为测试WebSocket服务的性能和稳定性提供了强大的工具。通过`websocket.xml`配置文件,我们可以定制...

    tsung测试总结

    1. **多协议支持**:TSUNG支持多种网络协议,使得它可以广泛应用于不同类型的系统和服务测试。 2. **高效的资源利用率**:即使是在普通硬件上,TSUNG也能够模拟大量的并发用户请求,对目标系统形成压力。 3. **集群...

    tsung+erlang包

    4. **结束阶段**:测试完成后,使用 `tsung stop` 命令停止测试,Tsung 会生成详细的测试报告,分析结果可以帮助我们了解系统在压力下的表现。 对于初学者,理解 Tsung 的基本概念和配置语法是至关重要的。同时,...

    Tsung负载测试tigase

    3. **编译安装**:解压下载的源码包,执行`./configure`、`make`以及`sudo make install`完成编译与安装过程。 4. **配置测试脚本**:编辑`~/.tsung/tsung.xml`文件,该文件是Tsung的默认配置文件。可以通过参考`/...

    Tsung_测试XMPP_安装使用说明

    tsung是用erlang开发的一款简单易用的压力测试工具,目前仅支持linux各版本系统安装,有tar.gz和deb两种安装文件, 目前我们测试用的是CentOS或RedHat两种操作系统,因此选择tar.gz安装文件,总的来说tsung工具有...

    tsung最新用户手册

    在实际使用中,Tsung可以模拟海量用户并发访问服务器,生成压力,从而帮助开发者发现潜在的性能瓶颈和系统故障。 Tsung的工作原理是通过建立与服务器的连接,并持续发送各种请求来模拟真实用户的操作行为。测试过程...

    tsung用户手册 linux

    压力测试 压力测试 tsung linux

    tsung-1.3.3

    Tsung会在指定的日志目录下生成测试报告,包括图形和文本两种形式,可以用来分析系统在压力下的性能表现。 总结来说,Tsung 1.3.3是Linux环境中一款强大的压力测试工具,它能帮助企业或个人评估其服务的稳定性和...

    tsung安装使用说明

    #### 二、Tsung 相关工具安装 ##### 2.1 准备工作 - 在 `/home` 目录下创建 `tsung` 文件夹存放安装所需的软件包。 - 使用 SSH 远程连接工具将所需工具包拷贝到 `/home/tsung` 目录下。 - 给 `/home/tsung` 下的...

    tsung_user_guide

    Tsung是一款开源的压力测试工具,它能够模拟大量用户并发访问应用系统,并收集详细的性能数据,帮助用户评估系统的可扩展性和性能瓶颈。Tsung不仅支持HTTP、XMPP等多种网络协议,还能够对数据库(如PostgreSQL、...

    tsung-react-stats:从 json 报告中显示 tsung 统计信息

    在执行完 `Tsung` 的负载测试后,它会生成一份详细的 JSON 格式报告,其中包含了丰富的性能指标,如响应时间、并发用户数、错误率等。这些数据对于分析系统性能、识别瓶颈以及优化服务至关重要。 `tsung-react-...

    Openfire 3.9.3 Load Test Tsung配置xml

    Openfire 3.9.3 Load Test Tsung配置xml,10万用户下集群测试的Tsung压力测试工具的jabber_cluster.xml,session 5分钟

    tsung脚本及说明

    tsung的测试脚本,包含发送单人消息,群组消息,获取花名册等

    tsung高并发测试工具搭建(自己亲测,详细的一逼)

    tsung高并发测试工具搭建(自己亲测,详细的一逼),改文档是自己一步一步摸索出来的,主要是安装tsung整个过程很详细,搭过的人,知道tsung的搭建依赖很恶心,不是一时半会能搞出来的

    tsung安装使用

    关于tsung工具的安装步骤以及使用过程中会遇到的常见问题解答

    RedDiamond_Tsung_tests:RedDiamond的负载测试

    5. **收集数据**:Tsung在运行过程中会记录各项性能指标。 6. **分析结果**:使用Tsung的内置报告工具或第三方工具分析测试数据,得出性能结论。 **RedDiamond系统分析** 在RedDiamond_Tsung_tests中,我们关注...

    基于Kubernetes的分布式压力测试方案

    - **模拟真实用户**:Tsung能够模拟真实的用户行为,例如设定新用户访问频率并执行一系列操作请求,这有助于更准确地评估系统在压力下的表现。 #### 四、Kubernetes中的Tsung部署 为了在Kubernetes集群中高效地...

Global site tag (gtag.js) - Google Analytics