- 浏览: 266248 次
- 性别:
- 来自: 杭州
最新评论
-
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 14618(注:分析代码基于Rabb ... -
RabbitMQ源码分析 - 队列机制
2012-07-09 10:10 13187(注:分析代码基于RabbitMQ 2.8.2) 当r ... -
RabbitMQ源码分析 – 消息生命周期
2012-06-25 10:53 9897(注:分析代码基于Rabb ... -
RabbitMQ源码分析 – 实体初始化
2012-06-11 16:15 6249(注:分析代码基于RabbitMQ 2.8.2) Con ... -
RabbitMQ源码分析 – 网络层
2012-05-30 13:31 8469(注:分析代码基于Rabb ... -
RabbitMQ源码分析 - 启动
2012-05-24 19:41 8720RabbitMQ是一个消息队列的实现,基于AMQP(Ad ... -
Erlang热部署 – 模块更新
2012-05-21 10:55 5097Erlang的热部署做的很完善,参见Release Hand ... -
Erlang并发机制 – 垃圾回收
2012-05-02 10:34 3840Erlang中每个进程都有独立的堆内存,默认的大小是23 ... -
Erlang并发机制 – 消息传递
2012-05-02 10:24 7445Erlang系统中,进程之间的通信是通过消息传递来完成的 ... -
Erlang并发机制 – 任务迁移算法
2012-05-02 10:22 3062一般情况下,在SMP环 ... -
Erlang并发机制 –进程调度
2012-04-10 22:43 8916Erlang调度器主要完成对Erlang进程的调度,它是 ... -
Erlang并发机制 - 进程
2012-03-26 21:24 7761在了解Erlang的并发机制之前,我们先来看一下Erlang与 ... -
CentOS6下编译Erlang R15B with wxWidgets
2012-02-23 16:41 19275如果不需要安装wxWidgets的话,很简单,./con ... -
Tsung源码分析(五):Tsung数据统计
2012-02-22 19:59 3001上一篇说明Tsung的服务器监控机制的时候提到,收集到监 ... -
Tsung源码分析(四):Tsung服务器监控
2012-02-21 22:18 4428Tsung在进行压力测试同时,也可以监控服务器结点上的C ... -
Tsung源码分析(三):Tsung插件式协议支持
2012-02-17 16:15 5086在Websocket for Tsung一文中有提到如 ... -
Tsung源码分析(二):Tsung压力生成过程
2012-02-17 12:55 3659上一篇讲到ts_config_server:newbeams通 ... -
Websocket for Tsung
2012-02-11 22:11 5671这篇博文距离上次提到要写差不多快两个月了,一方面时间不多 ... -
Windows下vimerl的配置以及扩展
2011-12-11 22:03 3550最近开始学习Erlang,一方面出于对其主要语言特征(高 ...
相关推荐
tsung是用erlang开发的一款简单易用的压力测试工具,目前仅支持linux各版本系统安装,有tar.gz和deb两种安装文件, 目前我们测试用的是CentOS或RedHat两种操作系统,因此选择tar.gz安装文件,总的来说tsung工具有...
tsung高并发测试工具搭建(自己亲测,详细的一逼),改文档是自己一步一步摸索出来的,主要是安装tsung整个过程很详细,搭过的人,知道tsung的搭建依赖很恶心,不是一时半会能搞出来的
压力测试 压力测试 tsung linux
tsung的测试脚本,包含发送单人消息,群组消息,获取花名册等
tsung里面测试websocket的插件含 websocket.xml 等
Openfire 3.9.3 Load Test Tsung配置xml,10万用户下集群测试的Tsung压力测试工具的jabber_cluster.xml,session 5分钟
Tsung安装使用的详细解说,主要针对xmpp的服务端(比如openfire的测试),编写测试场景的脚本配置详细说明。本人使用的是ubuntu操作系统、Tsung1.4.1
MQTT压力测试之Tsung的使用 MQTT压力测试之Tsung的使用
tsung是一个非常好用的压力测试软件,基于erlang语言,支持多种...在Ubuntu上装好tsung之后,首先要用ulimit修改系统支持的最大fd数量(ulimit-n 20480),否则tsung最多只能创建不到1024个连接,测试脚本是一个xml文件
tsung为一个开源的多协议分布式负载测试工具,使用erlang语言开发的。具体安装使用可以参考URL:http://www.51ste.com/share/det-222.html
tsung+erlang测试工具,初学者应用必备,内部放置tsung源程序文件和erlang文件
关于tsung工具的安装步骤以及使用过程中会遇到的常见问题解答
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-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:性能测试工具
包括tigase的安装运行,tsung的安装运行,压测结果的信息解析等;