這周準備對openfire3.6.4進(jìn)行壓力測試,從一些資料顯示TSung對jabber協(xié)議有較好的支持,因此今天下載安裝并初步對壓力進(jìn)行測試,主要的步聚如下:
1、從官方網(wǎng)站下載安裝包(我的電腦是ubuntu ,所以下載的是Deb包)。 目前官方最新版本為1.3.3, 下載地址為:
http://tsung.erlang-projects.org/dist/ubuntu/tsung_1.3.3-1_all.deb
下載后使用 sudo dpkg -i tsung_1.3.3-1_all.deb 進(jìn)行安裝,報錯, 找不到依賴(lài)包erlang-nox,
繼續使用 :sudo apt-get install erlang-nox
sudo apt-get -f install
安裝所有需要依賴(lài)的包。
安裝成功后運行 tsung -v 顯示版本號:Tsung version 1.3.3 表明安裝成功。
2、建立壓力測試配置文件對服務(wù)器進(jìn)行配置。
默認的配置文件存在于 ~/.tsung/tsung.xml 中。
從示例配置中復制需要進(jìn)行測試的配置 /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=“l(fā)ocalhost” 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=“l(fā)ocal”></jabber>
- </request>
- <request>
- <match do=“abort” when=“match”>error</match>
- <jabber type=“register” ack=“l(fā)ocal” id=“new”></jabber>
- </request>
- <request>
- <jabber type=“close” ack=“l(fā)ocal”></jabber>
- </request>
- </session>
- </sessions>
- </tsung>
對要進(jìn)行壓力測試的openfire服務(wù)器信息(IP和域名)進(jìn)行修改:
- <servers>
- <server host=‘127.0.0.1’ port=‘5222’ type=‘tcp’/>
- </servers>
- <option type=“ts_jabber” name=“domain” value=“erlang-projects.org”></option>
由于第一次配置有問(wèn)題就運行了 tsung start &, 接下來(lái)運行就一直報錯:
- 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
剛開(kāi)始以為是注冊用戶(hù)時(shí)有重名的用戶(hù)所至,但檢查服務(wù)器上一個(gè)用戶(hù)也沒(méi)有創(chuàng )建成功,因此排除,經(jīng)過(guò)一段時(shí)間的排錯,發(fā)現是因為前一個(gè)進(jìn)程沒(méi)有關(guān)閉所致,因此殺掉原來(lái)的進(jìn)程:
- $ 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 , 終于看到輸出到日志文件了!
檢查服務(wù)器用戶(hù),正在不斷的創(chuàng )建用戶(hù)。嗯?怎么創(chuàng )建了1000個(gè)左右的用戶(hù)就結束了呢?我的目標是要創(chuàng )建200000個(gè)用戶(hù)呀,查看日志是因為用戶(hù)open file 最大數限制, 修改系統最大連從接從1024到65535 ,無(wú)效!
后來(lái)才發(fā)現配置文件中還有一個(gè)重要的參數:maxusers, 于是增加到配置文件中:
- <clients>
- <client host=“l(fā)ocalhost” use_controller_vm=“true” maxusers=“60000”>
- </client>
- </clients>
這次終于大功告成。 用戶(hù)源源不斷地創(chuàng )建到了openfire 中。
3、壓力測試完成后, 需要出統計報表進(jìn)行報告:
進(jìn)入日志的目錄:cd ~/.tsung/log/20101213-09:32
運行腳本文件: /usr/lib/tsung/bin/tsung_stats.pl
報錯,不能生成圖片(曲線(xiàn)圖):
- $ /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$
于是安裝生成圖片的依賴(lài)包:
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.
繼續安裝缺少的模板依賴(lài):
sudo apt-get install perl5
sudo apt-get install libtemplate-perl
安裝成功,html的報表也出來(lái)了, 到此為止。
4、接下來(lái)進(jìn)行了40W用戶(hù)的注冊測試,以及在線(xiàn)用戶(hù)測試。壓力是出來(lái)了, 接下來(lái)的問(wèn)題是openfire服務(wù)器上文件打開(kāi)數限制導致的錯誤了,繼續進(jìn)行。。。。