Too Cool for Internet Explorer

benchmarking ejabberd

benchmarking-ejabberd

2 years ago friends of mine and I got rid of some horribly lagging public jabber servers like jabber.ccc.de. We decided to run our own “private” server.

We first used jabberd 1.4 which then suddenly stopped working after upgrading to Debian Etch in April ‘07. So we decided to give ejabberd a try. It is written in Erlang and therefore tends to be fault-tolerant and scalable even with hundreds of active users.

After running it for 10 months we’re pretty confident with ejabberd. I can not even remember typing something like /etc/init.d/ejabberd restart a single time ;)

Motivated by a nice talk about Erlang on 24c3 I finally made it to ran a Tsung ejabberd benchmark tonight.

Since Tsung itself is written in Erlang, it can simulate hundreds or thousands of users.

I started setting up a bunch of users which Tsung uses to login:

for i in `seq 1 1000`;
echo $i && ejabberdctl register tsung$i jabber.example.com p4ssw0rd$i
benchmarked ejabberd throughput

In the next step you configure what and how Tsung benchmarks in ~/.tsung/tsung.xml

In my case I defined 300 users to be logged in at the same time, modifying their roster and of course exchanging some messages: tsung.xml (html).

Furthermore I configured three load levels with the intervals 0.01s, 0.1s and 1s (see the <load> section). You will clearly recognize them in the generated graphs.

So, here they are: the results

I guess the server and the benchmark could be tweaked, but the performance is already much over our needs ;)

PS: ejabberd 2.0 is going to be released soon :D

PPS: tsung is not yet in portage so I wrote my own ebuild: tsung-1.2.1.ebuild

2 Comments »

RSS feed for comments on this post. TrackBack URI

  1. But how you generate jabber users?
    I was try repeated your test and and get the following error:
    stats: error_no_free_user_id

    Comment by Veaceslav — November 24, 2008 #

  2. Sort of old,but @Veaceslav:

    The command is more like:


    $ for i in `seq 1 1000`; do echo $i && ejabberdctl register tsung_test$i localhost tsung_test_password$i; done

    … where “tsung_test” and “tsung_test_password” are the stub for the user/pass combos that are created.

    Comment by Armando Di Cianno — March 29, 2010 #

Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Powered by WordPress with GimpStyle Theme design by Horacio Bella. Get Entries and comments.