首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

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

2012-08-15 
Tsung源码分析(一):Tsung启动过程一方面,分析Tsung的架构及实现,另一方面,也是一个学习Erlang的过程,所以

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

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

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

任务调度器相关

在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_launcher,remote_launcher。

???????? 如果use_controller_vm是true,ts_config_server:local_launcher会被调用,并且会先加载Tsung中的第二个application:tsung,然后启动该应用。启动成功后,会调用ts_launcher:launch和ts_launcher_static:launch(for 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:launch和ts_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来与测试服务器进行交互,直到会话完成,然后完成测试。

热点排行