您的位置:首页 > 运维架构

使用TSung对Jabber服务器openfire进行压力测试

2010-12-13 19:16 465 查看
这周准备对openfire3.6.4进行压力测试,从一些资料显示TSung对jabber协议有较好的支持,因此今天下载安装并初步对压力进行测试,主要的步聚如下:

1、从官方网站下载安装包(我的电脑是ubuntu ,所以下载的是Deb包)。 目前官方最新版本为1.3.3, 下载地址为:
http://tsung.erlang-projects.org/dist/ubuntu/ href="http://tsung.erlang-projects.org/dist/ubuntu/tsung_1.3.3-1_all.deb" target=_blank>tsung_1.3.3-1_all.deb

下载后使用 sudo dpkg -i tsung_1.3.3-1_all.deb 进行安装,报错, 找不到依赖包erlang-nox,

继续使用 :sudo apt-get install erlang-nox

sudo apt-get -f install

安装所有需要依赖的包。

安装成功后运行 tsung -v 显示版本号:Tsung version 1.3.3 表明安装成功。

2、建立压力测试配置文件对服务器进行配置。

默认的配置文件存在于 ~/.tsung/tsung.xml 中。

从示例配置中复制需要进行测试的配置 /usr/share/doc/tsung/examples/jabber_register.xml

示例配置代码如下:

<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung loglevel="notice" dumptraffic="false" version="1.0">

<clients>
<client host="localhost" use_controller_vm="true">
</client>
</clients>
<servers>
<server host='127.0.0.1' port='5222' type='tcp'/>
</servers>

<!-- register 200000 users in less than 15 minutes  -->
<load>
<arrivalphase phase="1" duration="15" unit="minute">
<users maxnumber="200000" interarrival="0.0025" unit="second"></users>
</arrivalphase>
</load>
<options>
<option type="ts_jabber" name="global_number" value="5"></option>
<option type="ts_jabber" name="userid_max" value="200000"></option>
<option type="ts_jabber" name="domain" value="erlang-projects.org"></option>
<option type="ts_jabber" name="username" value="tsung"></option>
<option type="ts_jabber" name="passwd" value="tsung"></option>
</options>
<sessions>
<session probability="100" name="jabber-example" type="ts_jabber">

<request>
<jabber type="connect" ack="local"></jabber>
</request>

<request>
<match do="abort" when="match">error</match>
<jabber type="register" ack="local" id="new"></jabber>
</request>

<request>
<jabber type="close" ack="local"></jabber>
</request>

</session>
</sessions>
</tsung>


对要进行压力测试的openfire服务器信息(IP和域名)进行修改:

<servers>
<server host='127.0.0.1' port='5222' type='tcp'/>
</servers>
<option type="ts_jabber" name="domain" value="erlang-projects.org"></option>



由于第一次配置有问题就运行了 tsung start &, 接下来运行就一直报错:

tsung start &
[2] 18021
web@spider:~/.tsung$ Starting Tsung
{error_logger,{{2010,12,13},{14,56,52}},"Protocol: ~p: register error: ~p~n",["inet_tcp",{{badmatch,{error,duplicate_name}},[{inet_tcp_dist,listen,1},{net_kernel,start_protos,4},{net_kernel,start_protos,3},{net_kernel,init_node,2},{net_kernel,init,1},{gen_server,init_it,6},{proc_lib,init_p_do_apply,3}]}]}
{error_logger,{{2010,12,13},{14,56,52}},crash_report,[[{initial_call,{net_kernel,init,['Argument__1']}},{pid,<0.22.0>},{registered_name,[]},{error_info,{exit,{error,badarg},[{gen_server,init_it,6},{proc_lib,init_p_do_apply,3}]}},{ancestors,[net_sup,kernel_sup,<0.10.0>]},{messages,[]},{links,[#Port<0.162>,<0.19.0>]},{dictionary,[{longnames,false}]},{trap_exit,true},{status,running},{heap_size,610},{stack_size,24},{reductions,498}],[]]}
{error_logger,{{2010,12,13},{14,56,52}},supervisor_report,[{supervisor,{local,net_sup}},{errorContext,start_error},{reason,{'EXIT',nodistribution}},{offender,[{pid,undefined},{name,net_kernel},{mfa,{net_kernel,start_link,[[tsung_controller,shortnames]]}},{restart_type,permanent},{shutdown,2000},{child_type,worker}]}]}
{error_logger,{{2010,12,13},{14,56,52}},supervisor_report,[{supervisor,{local,kernel_sup}},{errorContext,start_error},{reason,shutdown},{offender,[{pid,undefined},{name,net_sup},{mfa,{erl_distribution,start_link,[]}},{restart_type,permanent},{shutdown,infinity},{child_type,supervisor}]}]}
{error_logger,{{2010,12,13},{14,56,52}},std_info,[{application,kernel},{exited,{shutdown,{kernel,start,[normal,[]]}}},{type,permanent}]}
{"Kernel pid terminated",application_controller,"{application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}}"}
Crash dump was written to: erl_crash.dump
Kernel pid terminated (application_controller) ({application_start_failure,kernel,{shutdown,{kernel,start,[normal,[]]}}})
[2]-  Exit 1                  tsung start


刚开始以为是注册用户时有重名的用户所至,但检查服务器上一个用户也没有创建成功,因此排除,经过一段时间的排错,发现是因为前一个进程没有关闭所致,因此杀掉原来的进程:

$ ps aux | grep erlang
web      16281  0.0  0.0   1956   524 ?        S    11:53   0:00 /usr/lib/erlang/erts-5.7.4/bin/epmd -daemon
web      17822  0.0  0.4  49336  9380 pts/2    Tl   14:36   0:00 /usr/lib/erlang/erts-5.7.4/bin/beam.smp -P 250000 -A 16 -K true -- -root /usr/lib/erlang -progname erl -- -home /home/web -- -smp auto -rsh ssh -noshell -sname tsung_controller -setcookie tsung -boot /usr/lib/erlang//lib/tsung_controller-1.3.3/priv/tsung_controller -boot_var TSUNGPATH /usr/lib/erlang/ -pa /usr/lib/erlang//lib/tsung-1.3.3/ebin -pa /usr/lib/erlang//lib/tsung_controller-1.3.3/ebin -tsung_controller smp_disable true -tsung_controller debug_level 5 -tsung_controller config_file "/home/web/.tsung/tsung.xml" -tsung_controller log_file "/home/web/.tsung/log/tsung.log"
web      18978  0.0  0.0   3548   816 pts/2    R+   15:53   0:00 grep erlang
web@local:~/.tsung$ kill -9 17822


再运行 tsung start , 终于看到输出到日志文件了!

检查服务器用户,正在不断的创建用户。嗯?怎么创建了1000个左右的用户就结束了呢?我的目标是要创建200000个用户呀,查看日志是因为用户open file 最大数限制, 修改系统最大连从接从1024到65535 ,无效!

后来才发现配置文件中还有一个重要的参数:maxusers, 于是增加到配置文件中:

<clients>
<client host="localhost" use_controller_vm="true" maxusers="60000">
</client>
</clients>


这次终于大功告成。 用户源源不断地创建到了openfire 中。

3、压力测试完成后, 需要出统计报表进行报告:

进入日志的目录:cd ~/.tsung/log/20101213-09:32

运行脚本文件: /usr/lib/tsung/bin/tsung_stats.pl

报错,不能生成图片(曲线图):

$ /usr/lib/tsung/bin/tsung_stats.pl
creating subdirectory data
creating subdirectory images
creating subdirectory gnuplot_scripts
Error while running gnuplot: 对设备不适当的 ioctl 操作 at /usr/lib/tsung/bin/tsung_stats.pl line 167.
Error while running gnuplot: 对设备不适当的 ioctl 操作 at /usr/lib/tsung/bin/tsung_stats.pl line 167.
Error while running gnuplot: 对设备不适当的 ioctl 操作 at /usr/lib/tsung/bin/tsung_stats.pl line 167.
Error while running gnuplot: 对设备不适当的 ioctl 操作 at /usr/lib/tsung/bin/tsung_stats.pl line 167.
No data for Event
No data for Async
No data for Errors
Error while running gnuplot: 对设备不适当的 ioctl 操作 at /usr/lib/tsung/bin/tsung_stats.pl line 167.
Error while running gnuplot: 对设备不适当的 ioctl 操作 at /usr/lib/tsung/bin/tsung_stats.pl line 167.
Error while running gnuplot: 对设备不适当的 ioctl 操作 at /usr/lib/tsung/bin/tsung_stats.pl line 167.
Can't locate Template.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at /usr/lib/tsung/bin/tsung_stats.pl line 367.
web@spider:~/.tsung/log/20101213-08:12$


于是安装生成图片的依赖包: 

sudo apt-get install gnuplot

图片生成了, 但还是报模板找不到:

$ /usr/lib/tsung/bin/tsung_stats.pl
No data for Event
No data for Async
No data for Errors
Can't locate Template.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at /usr/lib/tsung/bin/tsung_stats.pl line 367.


 继续安装缺少的模板依赖:

sudo apt-get install perl5

sudo apt-get install libtemplate-perl

安装成功,html的报表也出来了, 到此为止。

4、接下来进行了40W用户的注册测试,以及在线用户测试。压力是出来了, 接下来的问题是openfire服务器上文件打开数限制导致的错误了,继续进行。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: