- 浏览: 268086 次
- 性别:
- 来自: 杭州
最新评论
-
pjsong3101:
引用 public static void main ...
JVM中可生成的最大Thread数量 -
lzp459260276:
RabbitMQ源码分析 – 消息生命周期 -
huotianjun:
关于:为什么要每个操作写一个信息,而不是在publish时写一 ...
RabbitMQ源码分析 – 持久化机制 -
puyongjun_1989:
楼主你好, (256 * 1024) / 64 = 409 ...
JVM中可生成的最大Thread数量 -
chuqingq:
很不错,学习!
Erlang并发机制 –进程调度
一方面,分析Tsung的架构及实现,另一方面,也是一个学习Erlang的过程,所以如果有碰到不了解的东西,也会记录下来。
(该分析系统基于Tsung 1.4.2,涉及到Erlang源码的部分会以R15B为基础)
Tsung由tsung.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。共享同一个cookie的Erlang节点才可以进行通信;
3) $BOOT_OPT:值为-boot $INSTALL_DIR/lib/tsung_controller-$VERSION/priv/tsung_controller,这个参数指定在erl命令启动时,加载tsung_controller.boot。boot文件中详细说明了应该如何启动应用。而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行为包中预先定义的常用模式:主要有application,supervisor,gen_server,gen_fsm)
=> TSUNG_ROOT/src/tsung_controller/tsung_controller.erl:(application)
erl命令按照boot文件启动后,会调用tsung_controll:start。start函数完成的功能很简单:在用户的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) |
工作进程 |
session中request统计 |
ts_stats_mon: start(page) |
工作进程 |
session中page统计 |
ts_stats_mon: start(connection) |
工作进程 |
session中connection统计 |
ts_stats_mon: start(transaction) |
工作进程 |
session中transaction统计 |
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_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来与测试服务器进行交互,直到会话完成,然后完成测试。
评论
这句描述不对吧,是10秒内只能重启最多4次
谢谢指出,已修改
呵呵,谢谢你的文章,最近也在看tsung,对我很有帮助
恩,我写博客的目的一方面算是自己技术的积累,另一方面就是希望能帮助到需要的人,呵呵
这句描述不对吧,是10秒内只能重启最多4次
谢谢指出,已修改
呵呵,谢谢你的文章,最近也在看tsung,对我很有帮助
这句描述不对吧,是10秒内只能重启最多4次
谢谢指出,已修改
这句描述不对吧,是10秒内只能重启最多4次
发表评论
-
RabbitMQ源码分析 – 持久化机制
2012-08-21 09:34 14691(注:分析代码基于Rabb ... -
RabbitMQ源码分析 - 队列机制
2012-07-09 10:10 13302(注:分析代码基于RabbitMQ 2.8.2) 当r ... -
RabbitMQ源码分析 – 消息生命周期
2012-06-25 10:53 9976(注:分析代码基于Rabb ... -
RabbitMQ源码分析 – 实体初始化
2012-06-11 16:15 6301(注:分析代码基于RabbitMQ 2.8.2) Con ... -
RabbitMQ源码分析 – 网络层
2012-05-30 13:31 8550(注:分析代码基于Rabb ... -
RabbitMQ源码分析 - 启动
2012-05-24 19:41 8779RabbitMQ是一个消息队列的实现,基于AMQP(Ad ... -
Erlang热部署 – 模块更新
2012-05-21 10:55 5147Erlang的热部署做的很完善,参见Release Hand ... -
Erlang并发机制 – 垃圾回收
2012-05-02 10:34 3899Erlang中每个进程都有独立的堆内存,默认的大小是23 ... -
Erlang并发机制 – 消息传递
2012-05-02 10:24 7514Erlang系统中,进程之间的通信是通过消息传递来完成的 ... -
Erlang并发机制 – 任务迁移算法
2012-05-02 10:22 3110一般情况下,在SMP环 ... -
Erlang并发机制 –进程调度
2012-04-10 22:43 8999Erlang调度器主要完成对Erlang进程的调度,它是 ... -
Erlang并发机制 - 进程
2012-03-26 21:24 7825在了解Erlang的并发机制之前,我们先来看一下Erlang与 ... -
CentOS6下编译Erlang R15B with wxWidgets
2012-02-23 16:41 19359如果不需要安装wxWidgets的话,很简单,./con ... -
Tsung源码分析(五):Tsung数据统计
2012-02-22 19:59 3034上一篇说明Tsung的服务器监控机制的时候提到,收集到监 ... -
Tsung源码分析(四):Tsung服务器监控
2012-02-21 22:18 4471Tsung在进行压力测试同时,也可以监控服务器结点上的C ... -
Tsung源码分析(三):Tsung插件式协议支持
2012-02-17 16:15 5119在Websocket for Tsung一文中有提到如 ... -
Tsung源码分析(二):Tsung压力生成过程
2012-02-17 12:55 3694上一篇讲到ts_config_server:newbeams通 ... -
Websocket for Tsung
2012-02-11 22:11 5720这篇博文距离上次提到要写差不多快两个月了,一方面时间不多 ... -
Windows下vimerl的配置以及扩展
2011-12-11 22:03 3596最近开始学习Erlang,一方面出于对其主要语言特征(高 ...
相关推荐
6. **分析结果**:Tsung会生成详细的日志文件,可以使用`tsung stats`生成统计报告,帮助分析系统在测试过程中的表现。 总的来说,Tsung 1.6.0提供了一套全面的负载测试解决方案,对于评估和优化系统性能、容量规划...
3. **运行测试**:使用Tsung命令启动测试,例如`tsung start -f websocket.xml`。 4. **收集结果**:测试过程中,Tsung会收集各种性能指标,如响应时间、吞吐量、成功率等。 5. **分析报告**:测试结束后,分析生成...
3. **运行阶段**:Tsung 持续监控系统性能,并记录各种指标,如响应时间、吞吐量、失败率等。 4. **结束阶段**:测试完成后,使用 `tsung stop` 命令停止测试,Tsung 会生成详细的测试报告,分析结果可以帮助我们...
接着,通过以下命令安装Tsung: ```bash sudo apt-get install tsung ``` ## 2. 使用Tsung注册用户 Tsung支持通过XML配置文件来定义测试场景。为了测试Openfire的注册功能,你可以从`tsung/examples`目录下复制一...
1. **多协议支持**:TSUNG支持多种网络协议,使得它可以广泛应用于不同类型的系统和服务测试。 2. **高效的资源利用率**:即使是在普通硬件上,TSUNG也能够模拟大量的并发用户请求,对目标系统形成压力。 3. **集群...
3. **编译安装**:解压下载的源码包,执行`./configure`、`make`以及`sudo make install`完成编译与安装过程。 4. **配置测试脚本**:编辑`~/.tsung/tsung.xml`文件,该文件是Tsung的默认配置文件。可以通过参考`/...
`tsung-react-stats` 是一个基于 `React` 开发的工具,旨在帮助用户更直观地理解和分析 `Tsung` 的 JSON 输出报告。`React` 是一个流行的 JavaScript 库,主要用于构建用户界面,特别是单页应用程序(SPA)。其组件...
tsung是用erlang开发的一款简单易用的压力测试工具,目前仅支持linux各版本系统安装,有tar.gz和deb两种安装文件, 目前我们测试用的是CentOS或RedHat两种操作系统,因此选择tar.gz安装文件,总的来说tsung工具有...
MQTT压力测试之Tsung的使用 MQTT压力测试之Tsung的使用
Tsung是一款开源的压力测试工具,它能够模拟大量用户并发访问应用系统,并收集详细的性能数据,帮助用户评估系统的可扩展性和性能瓶颈。Tsung不仅支持HTTP、XMPP等多种网络协议,还能够对数据库(如PostgreSQL、...
tsung高并发测试工具搭建(自己亲测,详细的一逼),改文档是自己一步一步摸索出来的,主要是安装tsung整个过程很详细,搭过的人,知道tsung的搭建依赖很恶心,不是一时半会能搞出来的
Tsung是一款开源的压力测试工具,能够模拟多个用户对各种服务器应用进行压力测试。它使用Erlang语言编写,支持多种协议,如HTTP、WebDAV、SOAP、PostgreSQL、MySQL、LDAP和Jabber/XMPP。在实际使用中,Tsung可以模拟...
配置好测试场景后,使用命令行启动Tsung: ``` tsung -f your_testplan.xml start ``` 运行过程中,可以通过`tsung logon`命令查看实时日志,测试结束后使用`tsung stop`命令停止测试。 5. **结果分析** ...
#### 一、Tsung 概述 Tsung 是一款基于 Erlang 开发的高性能压力测试工具,主要用于评估系统的并发处理能力。它支持多种协议,包括 HTTP、WebDAV、Jabber/XMPP、PostgreSQL、LDAP 和 MySQL,并且具备强大的分布式...
tsung的测试脚本,包含发送单人消息,群组消息,获取花名册等
Openfire 3.9.3 Load Test Tsung配置xml,10万用户下集群测试的Tsung压力测试工具的jabber_cluster.xml,session 5分钟
5. **收集数据**:Tsung在运行过程中会记录各项性能指标。 6. **分析结果**:使用Tsung的内置报告工具或第三方工具分析测试数据,得出性能结论。 **RedDiamond系统分析** 在RedDiamond_Tsung_tests中,我们关注...
关于tsung工具的安装步骤以及使用过程中会遇到的常见问题解答
Tsung是一款基于Erlang编程语言开发的负载和性能测试工具,它的设计目标是模拟大量并发用户,以分析系统的响应时间、吞吐量以及在高压力下的稳定性。由于Erlang语言本身的并发性和容错性,使得Tsung在处理大规模并发...