儿童文学

Tsung笔记之主从资源协调篇

  • 作者:本站
  • 时间:2019-08-13
  • 183人已阅读
您现在的位置:首页 > 儿童诗歌 > 文章
简介 %%addanewclientforeachCPUlists:duplicate(CPU,#client{host=Host,weight=Weight/CPU,maxusers=MaxUse

	Tsung笔记之主从资源协调篇

%%addanewclientforeachCPUlists:duplicate(CPU,#client{host=Host,weight=Weight/CPU,maxusers=MaxUsers})若要设置单个tsungclient实例共享多个CPU(此时不要设置cpu属性啦),需要在tsung启动时添加-s参数,tsungclient被启动时,smp属性被设置成auto:-smpauto+A8这样从机就只有一个tsungclient实例了,不会让人产生困扰。

若是临时租借从机,建议启动时使用-s参数,并且要去除cpu属性设置,这样才能够自动共享所有CPU核心。 从机分配用户过多,一样会分裂新的tsungclient实例假设client元素配置maxusers数量为1K,那么实际上被分配数量为10K(压测人数多,压测从机少)时,那么tsung_controller会继续分裂新的tsungclient实例,直到10K用户数量完成。 clienthost=client_98maxusers=1000weight=1ipvalue=/ip/clienttsungclient分配的数量超过自身可服务上限用户时(这里设置的是1K)时,关闭自身。 launcher(_Event,State=#launcher{nusers=0,phases=[]})-LOG(nomoreclientstostart,stop~n,INFO),{stop,normal,State};launcher(timeout,State=#launcher{nusers=Users,phase_nusers=PhaseUsers,phases=Phases,phase_id=Id,started_users=Started,intensity=Intensity})-BeforeLaunch=NOW,casedo_launch({Intensity,State#,Id})of{ok,Wait}-casecheck_max_raised(State)oftrue-%%lettheotherbeamstartsandwarnsts_montimer:sleep(DIE_DELAY),{stop,normal,State};false-......end;error-%retrywiththenextuser,waitrandomlyafewmsecRndWait=random:uniform(NEXT_AFTER_FAILED_TIMEOUT),{next_state,launcher,State#launcher{nusers=Users-1},RndWait}_controller接收从节点退出通知,但分配总数没有完成,会启动新的tsungclient实例(一样先启动从节点,然后再启动tsungclient实例)。

整个过程串行方式循环,直到10K用户数量完成:%%startalauncheronanewbeamwithslavemodulehandle_cast({newbeam,Host,Arrivals},State=#state{last_beam_id=NodeId,config=Config,logdir=LogDir})-Args=set_remote_args(LogDir,Config#_range),Seed=Config#,Node=remote_launcher(Host,NodeId,Args),caserpc:call(Node,tsung,start,[],RPC_TIMEOUT)of{badrpc,Reason}-LOGF(Failtostarttsungonbeam~p,reason:~p,[Node,Reason],ERR),slave:stop(Node),{noreply,State};_-ts_launcher_static:stop(Node),%noneedforstaticlauncherinthiscase(alreadyhaveone)ts_launcher:launch({Node,Arrivals,Seed}),{noreply,State#state{last_beam_id=NodeId+1}}end;tsungclient分配用户数一个tsungclient分配的用户数,可以理解为会话任务数。 Tsung以终端可以模拟的用户为维度进行定义压测。 所有配置tsungclient元素(设置M1)权重相加之和为总权重TotalWeight,用户总数为MaxMember,一个tsungclient实例(总数设为M2)分配的模拟用户数可能为:MaxMember*(Weight/TotalWeight)需要注意:-M2=M1-若压测阶段arrivalphase元素配置duration值过小,小于最终用户50万用户按照每秒250速率耗时时间,最终分配用户数将小于期望值只有一台物理机的tsungmaster启动方式clientsclienthost=localhostuse_controller_vm=true//clients没有物理从机,主从节点都在一台机器上,需要设置use_controller_vm=true。 相比tsung集群,单一节点tsung启动就很简单,主从之间不需要SSH通信,直接内部调用。 local_launcher([Host],LogDir,Config)-LOGF(Startalauncheronthecontrollerbeam~p~n,[Host],NOTICE),LogDirEnc=encode_filename(LogDir),%%settheapplicationspec(){ok,{_,_,AppSpec}}=load_app(tsung),{value,{env,OldEnv}}=lists:keysearch(env,1,AppSpec),NewEnv=[{debug_level,config(debug_level)},{log_file,LogDirEnc}],RepKeyFun=fun(Tuple,List)-lists:keyreplace(element(1,Tuple),1,List,Tuple)end,Env=lists:foldl(RepKeyFun,OldEnv,NewEnv),NewAppSpec=lists:keyreplace(env,1,AppSpec,{env,Env}),ok=application:load({application,tsung,NewAppSpec}),caseapplication:start(tsung)ofok-LOG(Applicationstarted,activatelauncher,~n,INFO),application:set_env(tsung,debug_level,Config#),caseConfig#_rangeof{Min,Max}-application:set_env(tsung,cport_min,Min),application:set_env(tsung,cport_max,Max);undefined-end,ts_launcher_static:launch({node(),Host,[]}),ts_launcher:launch({node(),Host,[],Config#}),1;{error,Reason}-LOGF(Cantstartlauncherapplication(reason:~p)!Aborting!~n,[Reason],EMERG),{error,Reason}end.用户生成控制用户和会话控制每一个tsungclient运行着一个ts_launch/ts_launch_static本地注册模块,掌控终端模拟用户生成和会话控制。

Top