上一篇讲到ts_config_server:newbeams通过ts_launcher:launch和ts_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函数会将压力客户端分成LocalBeams和RemoteBeams,区分这二者的关键是use_controller_vm这个选项,只有这个选项为true时,GetLocal函数才会把与启动tsung结点相同的结点看作是LocalBeams,并通过local_launcher函数在启动tsung的Erlang虚拟机上,再启动一个压力客户端。否则,即使Host在启动tsung的结点上,也会被认为是RemoteBeam。
set_remote_args设置用于启动远程压力客户端的参数,参数内容跟上一篇中tsung.sh使用的启动命令相似。
remote_launcher完成的功能很简单:通过slave:start/3启动远程压力客户端。slave:start/3函数通过Erlang的port机制ssh到远程结点,并运行通过set_remote_args构建的命令来启动远程压力客户端。在erlang的slave手册中,有如下描述:
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:launch和ts_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配置的每毫秒用户到达速度(两种配置方式:interarrival和arrivalrate,解析时会转换成每毫秒速度)及持续时间来确定(这个值同时受到该phase最大启动会话的限制)。但是最终启动的会话可能不会精确的与这个值相同,这主要是因为生成会话进程的过程本身也会对tsung的控制器产生压力,导致当phase的持续时间已经用完时,期望的会话进程数量还没有达到。
当所有phase的会话都已经启动完毕后,等待所有会话进程完成会话。
分享到:
相关推荐
MQTT压力测试之Tsung的使用 MQTT压力测试之Tsung的使用
压力测试 压力测试 tsung linux
tsung是用erlang开发的一款简单易用的压力测试工具,目前仅支持linux各版本系统安装,有tar.gz和deb两种安装文件, 目前我们测试用的是CentOS或RedHat两种操作系统,因此选择tar.gz安装文件,总的来说tsung工具有...
针对消息通知服务xmpp服务器,可以用tsung来测试消息通知服务能承受多大的压力。 在Ubuntu上装好tsung之后,首先要用ulimit修改系统支持的最大fd数量(ulimit-n 20480),否则tsung最多只能创建不到1024个连接,测试...
Openfire 3.9.3 Load Test Tsung配置xml,10万用户下集群测试的Tsung压力测试工具的jabber_cluster.xml,session 5分钟
Tsung安装使用的详细解说,主要针对xmpp的服务端(比如openfire的测试),编写测试场景的脚本配置详细说明。本人使用的是ubuntu操作系统、Tsung1.4.1
tsung的测试脚本,包含发送单人消息,群组消息,获取花名册等
tsung里面测试websocket的插件含 websocket.xml 等
tsung+erlang测试工具,初学者应用必备,内部放置tsung源程序文件和erlang文件
tsung高并发测试工具搭建(自己亲测,详细的一逼),改文档是自己一步一步摸索出来的,主要是安装tsung整个过程很详细,搭过的人,知道tsung的搭建依赖很恶心,不是一时半会能搞出来的
关于tsung工具的安装步骤以及使用过程中会遇到的常见问题解答
tsung为一个开源的多协议分布式负载测试工具,使用erlang语言开发的。具体安装使用可以参考URL:http://www.51ste.com/share/det-222.html
tsung-react-stats 从 json 报告中显示 tsung 统计信息
tsung 测试 java erlang
RedDiamond_Tsung_tests:RedDiamond的负载测试
tsung最新用户手册,包含HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP, and Jabber/XMPP servers压力测试模版,错误说明等。
tsung安装使用,参数说明,模拟openfire注册用户,模拟用户openfire登录、状态更改、发送消息,对openfire长时间压力测试
tsung安装包,linux下进行压力测试的工具
—tsung-1.5.0.tar.gz —libtemplate-perl_2.20.orig.tar.gz —gnuplot-4.4.0.tar.gz —otp_src_R15B.tar.gz —perl-HTML-Tagset-3.10-2.1.1.noarch.rpm —perl-HTML-Parser-3.55-1.fc6.x86_64.rpm —...
tsung:性能测试工具