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

Tsung源码分析(一):Tsung启动过程

阅读更多

一方面,分析Tsung的架构及实现,另一方面,也是一个学习Erlang的过程,所以如果有碰到不了解的东西,也会记录下来。

(该分析系统基于Tsung 1.4.2,涉及到Erlang源码的部分会以R15B为基础)

 

         Tsungtsung.sh(默认位置:/usr/bin/tsung)来启动。调用tsung.sh后,会进入到start()函数中,然后调用默认的erl命令来启动一个Erlang运行时系统。完整命令如下:

 

$ERL $ERL_OPTS $ERL_RSH -noshell $PROTO_DIST $NAMETYPE $CONTROLLER -setcookie $COOKIE  $BOOT_OPT \
    -pa $TSUNGPATH -pa $CONTROLLERPATH \
    -tsung_controller smp_disable $SMP_DISABLE \
    -tsung_controller debug_level $DEBUG_LEVEL \
    -tsung_controller warm_time $WARM_TIME \
-tsung_controller config_file \"$CONF_OPT_FILE\" 
-tsung_controller $LOG_OPT -tsung_controller $MON_FILE

 捡几个重要的参数说明一下:

1)         $ERL_RSH:指定Erlang要使用的rsh程序,用于启动slave结点,具体见slave模块说明。配置文件中的值为:-rsh ssh,也就是通过ssh命令启动slave。在Tsung中,主控结点要启动压力客户端时,要使用这种程序;

2)         $NAMETYPE $CONTROLLER -setcookie $COOKIE:值为-sname tsung_controller –setcookie tsung,用于指定当前启动Erlang结点的名称以及结点的cookie。共享同一个cookieErlang节点才可以进行通信;

3)         $BOOT_OPT:值为-boot $INSTALL_DIR/lib/tsung_controller-$VERSION/priv/tsung_controller,这个参数指定在erl命令启动时,加载tsung_controller.bootboot文件中详细说明了应该如何启动应用。而boot文件本身是由script脚本生成,script脚本又是根据.app.rel文件生成(可见script说明)。rel文件称为发布资源文件,详细说明该发布的名称、版本、ERTS的版本、包含的应用(application)。app文件称为应用的资源文件,详细说明该应用的版本、包含的模块,启动阶段等。在这里只要知道最终启动是的tsung_controller.erl,然后要注意到tsung_controller.app中定义的启动阶段为:{start_phases, [{load_config, []},{start_os_monitoring,[{timeout,30000}]},{start_clients,[]}]}

 

其它的-tsung_controller只是通过命令行的形式向tsung_controller应用传递参数。

 

         (下文中的模式是指OTP行为包中预先定义的常用模式:主要有applicationsupervisorgen_servergen_fsm

 

=> TSUNG_ROOT/src/tsung_controller/tsung_controller.erl:(application

         erl命令按照boot文件启动后,会调用tsung_controll:startstart函数完成的功能很简单:在用户的home目录下创建.tsung/log/20111222-1630(时间)目录,然后创建tsung_controller@domain.log文件,用于记录tsung的启动过程及后面的压力生成过程。文件创建成功后,会将控制转移到ts_controller_sup:start_link函数。

         当然根据application模式的定义,start函数需要返回顶层监控进程的进程标识符,ts_controller_sup:start_link会返回这个标识符。

 

=> TSUNG_ROOT/src/tsung_controller/ts_controller_sup.erl:(supervisor

         该模式的主要任务就是监控他的子进程,并且基于一些预设的规则,当子进程终止时采取行动。

         ts_controller_sup:start_link会调用supervisor:start_link,该函数会启动一个监控进程,用来调用ts_controller_sup :init函数,该函数会返回监控进程的设置以及该监控进程下的子进程的列表。

         ts_controller_sup的监控设置:{one_for_one, 4, 10},代表该监控进程会重新启动终止的子进程,并且在10秒内最多可以重启子进程4次

ts_controller_sup返回的子进程列表如下表所示:

进程名称

角色

描述

ts_config_server:

start_link

工作进程

配置的加载

ts_mon:start

工作进程

统计日志

ts_stats_mon:start

工作进程

 

ts_stats_mon:

start(request)

工作进程

sessionrequest统计

ts_stats_mon:

start(page)

工作进程

sessionpage统计

ts_stats_mon:

start(connection)

工作进程

sessionconnection统计

ts_stats_mon:

start(transaction)

工作进程

sessiontransaction统计

ts_match_logger:

start

工作进程

匹配日志(match

ts_os_mon_sup: start_link(erlang)

监控进程

通过Eralng方式监控服务器消耗

ts_os_mon_sup: start_link(munin)

监控进程

通过Munin方式监控服务器消耗

ts_os_mon_sup: start_link(snmp)

监控进程

通过SNMP方式监控服务器消耗

ts_time:start

工作进程

定时器

ts_msg_server:start

工作进程

消息服务进程,用于消息的生成

ts_user_server_sup:

start_link

监控进程

用户管理服务进程

ts_job_notify:

start_link

工作进程

任务调度器相关

ts_controller_sup:init执行完毕后,会返回到tsung_controller:start

 

=> TSUNG_ROOT/src/tsung_controller/tsung_controller.erl:(application

         Tsung_controller:start执行完毕后,erl会根据tsung_controller.app中定义的start_phases中定义的启动阶段按阶段执行:start_phase(load_config)-> start_phase(start_os_monitoring)-> start_phase(start_clients),分别完成加载配置、开始服务器监控(通过配置文件中的monitor指定)、启动压力客户端。后续说明只分析下start_phase(start_clients)的实现。

         start_phase(start_clients)会调用ts_mon:start_clients函数启动压力客户端。

 

=> TSUNG_ROOT/src/tsung_controller/ts_mon.erl:(gen_server

         ts_mon:start_clients-> start_logger-> start_launchers

         ts_mon:start_launchers会以压力客户端列表为参数调用ts_config_server:newbeams

 

=> TSUNG_ROOT/src/tsung_controller/ts_config_server.erl:(gen_server

         ts_config_server:newbeams主要会调用两个函数: local_launcherremote_launcher

         如果use_controller_vmtruets_config_server:local_launcher会被调用,并且会先加载Tsung中的第二个applicationtsung,然后启动该应用。启动成功后,会调用ts_launcher:launchts_launcher_static:launchfor static user)在启动tsung_controller应用的同一个VM上启动一个压力进程。

         ts_config_server:local_launcher-> start_slave启动远程结点。start_slave通过slave:start函数启动远程erl进程(通过start函数的arg参数传递命令行参数(通过set_remote_args构造),命令内容跟启动tsung_controller应用的基本相同,只不是启动的应用不是tsung_controller,而是tsung),并通过net_adm:ping验证远程端口是否打开。验证成功后,newbeams会为每一个远程结点分别调用ts_launcher_static:launchts_launcher:launch启动压力进程。

 

=> TSUNG_ROOT/src/tsung/ts_launcher.erl:(gen_fsm

         ts_launcher:launch->wait->wait_static->launcher->do_launch

         do_launcher通过ts_config_server:get_next_session拿到配置中定义的session信息,然后通过ts_client_sup:start_child来启动一个会话进程。

         launcher会循环启动会话进程,直到完成所承担的压力数量。

 

=> TSUNG_ROOT/src/tsung/ts_client_sup.erl:(supervisor

         ts_client_sup:start_client通过supervisor:start_child生成一个会话进程。ts_client_sup启动的会话进程为ts_client,由其负责与测试服务器之间的交互。

 

这样,基本就完成了Tsung的启动过程,并且会话客户端已经启动,然后每个会话客户端会按照配置中定义的session来与测试服务器进行交互,直到会话完成,然后完成测试。

分享到:
评论
4 楼 jzhihui 2012-09-22  
cesia1984 写道
jzhihui 写道
cesia1984 写道
并且允许的最大重启次数为4,每次出错时的最大处理时间10秒

这句描述不对吧,是10秒内只能重启最多4次


谢谢指出,已修改


呵呵,谢谢你的文章,最近也在看tsung,对我很有帮助


恩,我写博客的目的一方面算是自己技术的积累,另一方面就是希望能帮助到需要的人,呵呵
3 楼 cesia1984 2012-09-21  
jzhihui 写道
cesia1984 写道
并且允许的最大重启次数为4,每次出错时的最大处理时间10秒

这句描述不对吧,是10秒内只能重启最多4次


谢谢指出,已修改


呵呵,谢谢你的文章,最近也在看tsung,对我很有帮助
2 楼 jzhihui 2012-09-21  
cesia1984 写道
并且允许的最大重启次数为4,每次出错时的最大处理时间10秒

这句描述不对吧,是10秒内只能重启最多4次


谢谢指出,已修改
1 楼 cesia1984 2012-09-21  
并且允许的最大重启次数为4,每次出错时的最大处理时间10秒

这句描述不对吧,是10秒内只能重启最多4次

相关推荐

    tsung1.6.0

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

    tsung里面测试websocket的插件

    3. **运行测试**:使用Tsung命令启动测试,例如`tsung start -f websocket.xml`。 4. **收集结果**:测试过程中,Tsung会收集各种性能指标,如响应时间、吞吐量、成功率等。 5. **分析报告**:测试结束后,分析生成...

    tsung+erlang包

    3. **运行阶段**:Tsung 持续监控系统性能,并记录各种指标,如响应时间、吞吐量、失败率等。 4. **结束阶段**:测试完成后,使用 `tsung stop` 命令停止测试,Tsung 会生成详细的测试报告,分析结果可以帮助我们...

    Tsung安装使用详细解说

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

    tsung测试总结

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

    Tsung负载测试tigase

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

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

    `tsung-react-stats` 是一个基于 `React` 开发的工具,旨在帮助用户更直观地理解和分析 `Tsung` 的 JSON 输出报告。`React` 是一个流行的 JavaScript 库,主要用于构建用户界面,特别是单页应用程序(SPA)。其组件...

    Tsung_测试XMPP_安装使用说明

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

    MQTT压力测试之Tsung的使用

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

    tsung_user_guide

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

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

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

    tsung最新用户手册

    Tsung是一款开源的压力测试工具,能够模拟多个用户对各种服务器应用进行压力测试。它使用Erlang语言编写,支持多种协议,如HTTP、WebDAV、SOAP、PostgreSQL、MySQL、LDAP和Jabber/XMPP。在实际使用中,Tsung可以模拟...

    tsung-1.3.3

    配置好测试场景后,使用命令行启动Tsung: ``` tsung -f your_testplan.xml start ``` 运行过程中,可以通过`tsung logon`命令查看实时日志,测试结束后使用`tsung stop`命令停止测试。 5. **结果分析** ...

    tsung安装使用说明

    #### 一、Tsung 概述 Tsung 是一款基于 Erlang 开发的高性能压力测试工具,主要用于评估系统的并发处理能力。它支持多种协议,包括 HTTP、WebDAV、Jabber/XMPP、PostgreSQL、LDAP 和 MySQL,并且具备强大的分布式...

    tsung脚本及说明

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

    Openfire 3.9.3 Load Test Tsung配置xml

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

    RedDiamond_Tsung_tests:RedDiamond的负载测试

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

    tsung安装使用

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

    tsung-1.5.1.tar.gz

    Tsung是一款基于Erlang编程语言开发的负载和性能测试工具,它的设计目标是模拟大量并发用户,以分析系统的响应时间、吞吐量以及在高压力下的稳定性。由于Erlang语言本身的并发性和容错性,使得Tsung在处理大规模并发...

Global site tag (gtag.js) - Google Analytics