8. Astertest - asterisk stress testing tool     ( Back to Tutorials Page )

Astertest is a Windows application that can test the CPU load of your Asterisk PBX server. In order to use it you must have advanced knowledge in VoIP. To complete the test you must have an Asterisk PBX server that originates the calls and one more Asterisk server which to be tested. You can download the application from http://astertest.com/downloads/. You will need most of the things there. Let us start doing the things one by one.

1.Select the servers

You must have clear idea which machine will be used as Origination server and which one as Test server.

2.Audio Files

The audio files are stored in /usr/src/asterisk/sounds/. Copy astertest-rtp.gsm from http://astertest.com/downloads/ to the Origination server. On the Test server you have to copy all the sound file formats you wish to test. For alaw you need some *.alaw audio file for example - ast-test-al.al. You can use your own files with different name, but make sure when you configure the extensions.conf on the Test server to use the correct audio file name with the Playback command, ast-test-gsm.gsm for gsm tests, ast-test-ul.ul for ulaw, ast-test-ilbc.ilbc etc. Now when you have the audio files for the test you have to implement some new modules in asterisk that will give you the information for the actual CPU load while testing.

3.New Asterisk Modules

The modules below must be installed on both Asterisk servers:
app_securax_cpuinfo.c
app_securax_serverload.c
securax_utils.c
securax_utils.h

Copy these files in /usr/src/asterisk/asterisk/apps/ on both Origination server and Test server.

4. Changing the application’s Makefile

Now Asterisk has to be told that these modules really exits and they have to be loaded. For this purpose you have to change the Makefile in /usr/src/asterisk/asterisk/apps/. Open the Makefile that you have downloaded and copy the bolded lines to their corresponding places in the original Makefile.

So you have to add these two modules in the beginning in “APPS” - app_securax_serverload.so and app_securax_cpuinfo.so – here is how this part of your Makefile has to look after you change it.

Further on you have to add the following module definitions (this is used when you compile Asterisk).

securax_utils.o: app_securax_utils.c
$(CC) -pipe $(CFLAGS) -c -o app_securax_utils.o app_securax_utils.c


app_securax_cpuinfo.o: app_securax_cpuinfo.c
$(CC) -pipe -I/usr/local/pgsql/include $(CFLAGS) -c -o app_securax_cpuinfo.oapp_securax_cpuinfo.c


app_securax_cpuinfo.so: app_securax_cpuinfo.o
$(CC) -pipe $(CFLAGS) -c -o securax_utils.o securax_utils.c
$(CC) $(SOLINK) -o $@ $< securax_utils.o


app_securax_serverload.o: app_securax_serverload.c
$(CC) -pipe -I/usr/local/pgsql/include $(CFLAGS) -c –o app_securax_serverload.o app_securax_serverload.c


app_securax_serverload.so: app_securax_serverload.o
$(CC) -pipe $(CFLAGS) -c -o securax_utils.o securax_utils.c
$(CC) $(SOLINK) -o $@ $< securax_utils.o


Here is how this part of the Makefile should look after you change it:

You have to change this Makefile in both Origination and Test server. In order these changes in the Makefile to take effect you have to recompile the Asterisk on both of the servers.

5.Re-compiling Asterisk

Go to the Asterisk source - /usr/src/asterisk/asterisk and recompile it.
cd /usr/src/asterisk/asterisk
make
make install

Now your Asterisk servers have the modules implemented. We have now to add just some more things in the managers.conf and securax_serverload.conf files (/etc/asterisk)

6.Configuring securax_serverload.conf

This file also has to be downloaded to /etc/asterisk/. You can also create file with same name in the mentioned directory and write in the data needed. Here is how you can do it:
cd /etc/asterisk
vi securax_serverload.conf
[general]
push_level=1

This file has to exist again on both – Origination and Test servers.


7.Configuring managers.conf

In this file which is placed in /etc/asterisk you have to create a user on the Origination server and one on the Test server, so you should have users on both servers in managers.conf. When you start the application and before beginning a test you will be prompted to provide username and password for each server (Origination and Test). This is username and password for the relevant user in /etc/asterisk/managers.conf. Below you can see my configuration.

Above the [general] account is disabled by default i.e. enabled = no. So first you have to change this to yes. Then you have to create an account.

[test]
this is the username

secret=test
the password is set to test

read=system,call,log,verbose,command,agent,user
write=system,call,log,verbose,command,agent,user
this is authorization level for the user for the various classes


You need to add some users and extensions to servers now.

8.Configuring iax.conf

Astertest uses some certain users for the test. Here is what you have to add to Asterisk Test servers, no specified users are needed for the Origination server. Here are the users you have to add to /etc/asterisk/iax.conf on the server you are going to test.

Here is the complete list of all users you can have. For every audio codec format you want to test you must have separate user.

[testg723]
type=friend
host=dynamic
context=astertest
disallow=all
allow=g723

[testgsm]
type=friend
host=dynamic
context=astertest
disallow=all
allow=gsm

[testulaw]
type=friend
host=dynamic
context=astertest
disallow=all
allow=ulaw

[testalaw]
type=friend
host=dynamic
context=astertest
disallow=all
allow=alaw

[testg726]
type=friend
host=dynamic
context=astertest
disallow=all
allow=g726

[testadpcm]
type=friend
host=dynamic
context=astertest
disallow=all
allow=adpcm

[testslin]
type=friend
host=dynamic
context=astertest
disallow=all
allow=slin

[testlpc10]
type=friend
host=dynamic
context=astertest
disallow=all
allow=lpc10

[testg729]
type=friend
host=dynamic
context=astertest
disallow=all
allow=g729

[testspeex]
type=friend
host=dynamic
context=astertest
disallow=all
allow=speex

[testilbc]
type=friend
host=dynamic
context=astertest
disallow=all
allow=ilbc


9. Configuring extensions.conf

Astertest also needs some certain extensions on both the Origination and the Test server. This file is in /etc/asterisk/.

Origination Server

This context and extensions have to be added in among your extensions.


Test Server

The following context has to be added in extensions.conf of your Test server.

Now you have all the things you need to start the test. Restart Asterisk on both of the servers and then enter the command line (CLI). To make sure that the new modules are working – check if they are loaded. Type in CLI show modules and if app_securax_serverload.so and app_securax_cpuinfo has a corresponding 1 that means they are loaded. Another way to check this is to type show modules like app_securax – this will again show you the modules with that name. Every module will have value 0 if it is not loaded and 1 if it is loaded. So if everything seems correct we may start the test itself, and if you have some problems check whether you followed precisely the steps above.

As you see above you need to have separate extensions for the different users, so as in my file not all possible extensions are used, here is the full list of extensions for all the users.

exten => test02g723,1,Answer();
exten => test02g723,2,Playback(ast-test-g723);
exten => test02g723,3,Hangup();

exten => test02gsm,1,Answer();
exten => test02gsm,2,Playback(ast-test-gsm);
exten => test02gsm,3,Hangup();

exten => test02ulaw,1,Answer();
exten => test02ulaw,2,Playback(ast-test-ul);
exten => test02ulaw,3,Hangup();

exten => test02alaw,1,Answer();
exten => test02alaw,2,Playback(ast-test-alaw);
exten => test02alaw,3,Hangup();

exten => test02g726,1,Answer();
exten => test02g726,2,Playback(ast-test-g726);
exten => test02g726,3,Hangup();

exten => test02adpcm,1,Answer();
exten => test02adpcm,2,Playback(ast-test-adpcm);
exten => test02adpcm,3,Hangup();

exten => test02slin,1,Answer();
exten => test02slin,2,Playback(ast-test-siln);
exten => test02siln,3,Hangup();

exten => test02lpc10,1,Answer();
exten => test02lpc10,2,Playback(ast-test-lpc10);
exten => test02lpc10,3,Hangup();

exten => test02g729,1,Answer();
exten => test02g729,2,Playback(ast-test-g729);
exten => test02g729,3,Hangup();

exten => test02speex,1,Answer();
exten => test02speex,2,Playback(ast-test-speex);
exten => test02speex,3,Hangup();

exten => test02ilbc,1,Answer();
exten => test02ilbc,2,Playback(ast-test-ilbc);
exten => test02ilbc,3,Hangup();


10. Starting Astertest

1.Run the application - astertest.exe


Here you can start new test, make again an existing test or edit an existing test. Choose “Start a new test” and click Next.

2.Choose type and name for the test


Type the name you want to give to the test in the ‘Name’ field at the top and choose type (answer, playback or meetme) for the test. When done click ‘Next’.

3.Provide information for the servers


In the “Origination server” part type the IP address for the Origination server, leave the port as by default – 5038. Then type the username and password that you created in managers.conf on the corresponding Asterisk server.

In the “Test server” part type again the IP of the Asterisk server that you are going to test and the username and password for the user you created in managers.conf on the relevant server. When done click next to proceed.

4.Final adjustments for the test


On the top check the amount of calls you want to do while testing – test till overload of the tested server or test certain amount of calls. I will run the test for a hundred calls.

Speed – is the speed of origination for the calls. Normal is approximately 1 call in a second.

Protocol – is the protocol type that asterisk will use. As we registered our users in iax.conf we have to use IAX2 protocol for the test.

In Transcoding you have to choose codec for the origination server and for the tested server. There will be no transcoding if you choose the same codecs for original and resulting codec.

At the bottom check “Send RTP” – this way the media file will be send. If you do not check it you will have just answer in the test, without real voice pressure over the server.

When done click ‘Finish’ to start the test.

5.Testing


This is the test ready to be started, just click “Start” to run the test.

At the upper part you can see information for the origination server – calls at the moment (on the small graph on the left), CPU load (the graph on the right, showing Idle load, system load, user load), and below more information for the calls made and channels used at the moment.

At the bottom part you see the same information for the test server.

While the test is executed you can magnify the CPU load graph. You can do this by clicking left mouse button and move left to right. Here is a magnified graph.

When you again click the left mouse button and move the mouse from right to left at the same time and the graph will be minimized to its normal size.

When the test is done – the calls reach the certain amount you wanted or the server is overloaded the test is done. Then the calls are unloaded. Here you see a progress bar while all the calls are hanging up.

Then you can see the graph from the test.

You now have the test and when you run again Astertest, you can redo the test without doing the settings again (step 1 to 4), or you can also change a little bit the test – for example increase or decrease the amount of calls, change the codec, etc.

User Comments

Jane <yanguilin1982 at yahoo dot com dot cn>
17 March 2006 02:19:15
Why there should be two * servers? How about on * server?
Can anyone tell me why the original server doesn't make any calls?

Thank you very much.
Jane <yanguilin1982 at yahoo dot com dot cn>
10 March 2006 04:33:07
Does Astest work with Asterisk-1.2.4? When I recompile it with Asterisk-1.2.4,I got the following info:
gcc -pipe -I/usr/local/pgsql/include -pipe -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -g3 -Iinclude -I../include -D_REENTRANT -D_GNU_SOURCE -O6 -march=i686 -fomit-frame-pointer -fPIC -c -o app_securax_serverload.o app_securax_serverload.c
app_securax_serverload.c: In function `scx_load_config':
app_securax_serverload.c:73: warning: implicit declaration of function `ast_load'
app_securax_serverload.c:73: warning: initialization makes pointer from integer without a cast
app_securax_serverload.c:84: warning: implicit declaration of function `ast_destroy'
app_securax_serverload.c: In function `scx_load':
app_securax_serverload.c:96: warning: passing arg 3 of `ast_pthread_create_stack' from incompatible pointer type
gcc -pipe -pipe -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -g3 -Iinclude -I../include -D_REENTRANT -D_GNU_SOURCE -O6 -march=i686 -fomit-frame-pointer -fPIC -c -o securax_utils.o securax_utils.c
gcc -shared -Xlinker -x -o app_securax_serverload.so app_securax_serverload.o securax_utils.o -L/usr/local/pgsql/lib -lpq
/usr/bin/ld: cannot find -lpq
collect2: ld returned 1 exit status
make[1]: *** [app_securax_serverload.so] Error 1

Any advice will be really appreciated!

Tang Luong <xuantang09 at yahoo dot com>
24 February 2006 07:12:13
In our testing, origination server doesn't make any calls. What might be the problem?
Tang Luong <xuantang09 at yahoo dot com>
23 February 2006 11:31:01
In our testing, origination server doesn't make any calls. What might be the problem?
Tang Luong <xuantang09 at yahoo dot com>
22 February 2006 07:08:01
I builded success 2 files app_securax_serverload.so and app_securax_cpuinfo.so but when start asterisk this 2 module don't load.

http://www.asteriskguru.com/tutorials/astertest.html

$asterisk -gvvvv -c

display :

[app_securax_cpuinfo.so] => (Securax cpuinfo manager function)
== Manager registered action CPUInfo
Feb 22 01:04:55 WARNING[25502]: app_securax_cpuinfo.c:71 scx_load: Securax cpuinfo manager function loaded.
[app_securax_serverload.so]Feb 22 01:04:55 WARNING[25502]: loader.c:325 __load_resource: /usr/lib/asterisk/modules/app_securax_serverload.so: undefined symbol: ast_load
Feb 22 01:04:55 WARNING[25502]: loader.c:554 load_modules: Loading module app_securax_serverload.so failed!
Ouch ... error while writing audio data: : Broken pipe
Warning, flexibel rate not heavily tested!

please help me fix it!!!

thanks
faraz majid <faraz dot m dot ali at gmail dot com>
23 January 2006 12:15:50
Well i managed to load the modules on Asterisk version 1.2.1. edit the file apps/app_securax_serverload.c , on line 75 change : 'ast_load' to 'ast_config_load' & similarly on line 86 change 'ast_destroy' to ast_config_destroy' save the changes and recomplie asterisk... u r done..

For testing SIP calls:
----------------------
In /etc/asterisk/sip.conf
under the [general] section set as follows

[general]
context=astertest
allowguest=yes

all is done,
if u run into trouble then u can contact me
allen <qsun at mdc dot cn>
09 January 2006 03:29:23
useless!!!!!
allen <qsun at mdc dot cn>
31 December 2005 06:53:58
mechanix <dmitry dot muntean at gmail dot com>
11 November 2005 16:20:53
does it work with asterisk 1.2beta?
i get following during asterisk startup:
[app_securax_serverload.so]Nov 11 17:26:18 WARNING[16466]: loader.c:325 __load_resource: /usr/lib/asterisk/modules/app_securax_serverload.so: undefined symbol: ast_load
Nov 11 17:26:18 WARNING[16466]: loader.c:554 load_modules: Loading module app_securax_serverload.so failed!
Ouch ... error while writing audio data: : Broken pipe


yes,we meet the same problem as above,can someone te us the reason.
we all followed by the steps as shown in this article.
thanks a lot.
Geongo <geongo at yahoo dot com>
28 December 2005 20:36:18
What is the maximum number of calls that you achieved and the maximum Calls per Second Rate? What was your hardware configuration for the servers?
mechanix <dmitry dot muntean at gmail dot com>
11 November 2005 16:20:53
does it work with asterisk 1.2beta?
i get following during asterisk startup:
[app_securax_serverload.so]Nov 11 17:26:18 WARNING[16466]: loader.c:325 __load_resource: /usr/lib/asterisk/modules/app_securax_serverload.so: undefined symbol: ast_load
Nov 11 17:26:18 WARNING[16466]: loader.c:554 load_modules: Loading module app_securax_serverload.so failed!
Ouch ... error while writing audio data: : Broken pipe
spyke <cosimo dot fadda at gmail dot com>
27 October 2005 16:09:06
It is the same to me; I'm using sip instead of iax and I'm not able to choose the codec translaction.
C.
opeVoce <support at vocee dot com>
19 October 2005 00:43:39
Yes, we exactly followed the instructions. In manager.conf, we change 'push_level=1' to 'push_rate=1'. We saw manager registered on both servers. We saw login, status commands in both asterisks. We saw 'cpuinfo commands' only on the test server. There is nothing else.

I will send you screenshots from email.
ivan <support at asteriskguru dot com>
18 October 2005 11:07:31
Do you follow exactly the steps above. Did you tested it on some other pc successfully. What does the test shows. Can you send some screenshots and description of what you are doing.
opeVoce <support at vocee dot com>
18 October 2005 07:01:43
In our testing, origination server doesn't make any calls. What might be the problem?
ivan <support at asteriskguru dot com>
20 September 2005 10:41:50
All the screenshots above in the tutorial are results from a real test
Senad <Senad at bicom dot us>
16 September 2005 19:32:23
Hi,

Have you any test results published yet?

Add Comment

Name:
Email:
Comment:
 

contact us at: support@asteriskguru.com - asterisKGuru.com © all rights reserved   |   *asterisk is registered trademark of © Digium™