上一篇讲到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的会话都已经启动完毕后,等待所有会话进程完成会话。
分享到:
相关推荐
6. **分析结果**:Tsung会生成详细的日志文件,可以使用`tsung stats`生成统计报告,帮助分析系统在测试过程中的表现。 总的来说,Tsung 1.6.0提供了一套全面的负载测试解决方案,对于评估和优化系统性能、容量规划...
MQTT压力测试之Tsung的使用 MQTT压力测试之Tsung的使用
接着,通过以下命令安装Tsung: ```bash sudo apt-get install tsung ``` ## 2. 使用Tsung注册用户 Tsung支持通过XML配置文件来定义测试场景。为了测试Openfire的注册功能,你可以从`tsung/examples`目录下复制一...
5. **分析报告**:测试结束后,分析生成的报告,找出性能瓶颈,优化服务。 **总结** Tsung提供的WebSocket插件为测试WebSocket服务的性能和稳定性提供了强大的工具。通过`websocket.xml`配置文件,我们可以定制...
1. **多协议支持**:TSUNG支持多种网络协议,使得它可以广泛应用于不同类型的系统和服务测试。 2. **高效的资源利用率**:即使是在普通硬件上,TSUNG也能够模拟大量的并发用户请求,对目标系统形成压力。 3. **集群...
4. **结束阶段**:测试完成后,使用 `tsung stop` 命令停止测试,Tsung 会生成详细的测试报告,分析结果可以帮助我们了解系统在压力下的表现。 对于初学者,理解 Tsung 的基本概念和配置语法是至关重要的。同时,...
3. **编译安装**:解压下载的源码包,执行`./configure`、`make`以及`sudo make install`完成编译与安装过程。 4. **配置测试脚本**:编辑`~/.tsung/tsung.xml`文件,该文件是Tsung的默认配置文件。可以通过参考`/...
tsung是用erlang开发的一款简单易用的压力测试工具,目前仅支持linux各版本系统安装,有tar.gz和deb两种安装文件, 目前我们测试用的是CentOS或RedHat两种操作系统,因此选择tar.gz安装文件,总的来说tsung工具有...
在实际使用中,Tsung可以模拟海量用户并发访问服务器,生成压力,从而帮助开发者发现潜在的性能瓶颈和系统故障。 Tsung的工作原理是通过建立与服务器的连接,并持续发送各种请求来模拟真实用户的操作行为。测试过程...
压力测试 压力测试 tsung linux
Tsung会在指定的日志目录下生成测试报告,包括图形和文本两种形式,可以用来分析系统在压力下的性能表现。 总结来说,Tsung 1.3.3是Linux环境中一款强大的压力测试工具,它能帮助企业或个人评估其服务的稳定性和...
#### 二、Tsung 相关工具安装 ##### 2.1 准备工作 - 在 `/home` 目录下创建 `tsung` 文件夹存放安装所需的软件包。 - 使用 SSH 远程连接工具将所需工具包拷贝到 `/home/tsung` 目录下。 - 给 `/home/tsung` 下的...
Tsung是一款开源的压力测试工具,它能够模拟大量用户并发访问应用系统,并收集详细的性能数据,帮助用户评估系统的可扩展性和性能瓶颈。Tsung不仅支持HTTP、XMPP等多种网络协议,还能够对数据库(如PostgreSQL、...
在执行完 `Tsung` 的负载测试后,它会生成一份详细的 JSON 格式报告,其中包含了丰富的性能指标,如响应时间、并发用户数、错误率等。这些数据对于分析系统性能、识别瓶颈以及优化服务至关重要。 `tsung-react-...
Openfire 3.9.3 Load Test Tsung配置xml,10万用户下集群测试的Tsung压力测试工具的jabber_cluster.xml,session 5分钟
tsung的测试脚本,包含发送单人消息,群组消息,获取花名册等
tsung高并发测试工具搭建(自己亲测,详细的一逼),改文档是自己一步一步摸索出来的,主要是安装tsung整个过程很详细,搭过的人,知道tsung的搭建依赖很恶心,不是一时半会能搞出来的
关于tsung工具的安装步骤以及使用过程中会遇到的常见问题解答
5. **收集数据**:Tsung在运行过程中会记录各项性能指标。 6. **分析结果**:使用Tsung的内置报告工具或第三方工具分析测试数据,得出性能结论。 **RedDiamond系统分析** 在RedDiamond_Tsung_tests中,我们关注...
- **模拟真实用户**:Tsung能够模拟真实的用户行为,例如设定新用户访问频率并执行一系列操作请求,这有助于更准确地评估系统在压力下的表现。 #### 四、Kubernetes中的Tsung部署 为了在Kubernetes集群中高效地...