Jmeter script to load test a BigBlueButton server by stressing the html5-client websocket, this can be useful to test some specific messages and compare performance between changes/versions made to the client to find bottlenecks.
Docker based with grafana and influxdb integration to visualize results:
- The
test/bbb_23.jmx
script creates a meeting for each line intest/meetings.csv
and join them with users according to the number of threads defined byThreadsOwner
andThreadsGuest
.
Then, each user/thread:
- Performs the initial default meteor websocket communication and subscribe to all collections;
- Sends a "Hello" message to chat and change the emojiStatus;
- Enter in a loop to send VoidConnection and a Chat Message for
PingLoopOwner
andPingLoopGuest
times.
When the Guest/Viewer loop ends, they leave the meeting.
When the Owner loop ends, they end the meeting.
Docker and docker-compose
git clone https://github.com/mconf/bbb-jmeter.git && cd bbb-jmeter
- Edit
.env
file:- Add the
hostname
andsalt
of the server you want to test against - Configure the threads and ping variables as desired
- Add the
- Edit
test/meetings.csv
if you want to create more than one meeting (and increaseThreadsOwner
accordingly)- format:
meetingName,meetingId,voiceBridge,moderatorUserNamePrefix,guestUserNamePrefix
- format:
- Run
docker-compose up -d
Open http://localhost:30000/ in your browswer to see live results while test is running, the jmeter logs are stored locally in $LOG_DIR
folder, and metrics data in the influx-grafana/influx-data
, so the historical data from previous test are kept and browseable in grafana.
- default user/password: admin/admin
- Download latest jmeter https://jmeter.apache.org/download_jmeter.cgi (requires Java 8)
- You will also need the Webscockets Plugin:
- Download Jars: https://jmeter-plugins.org/get/ and https://bitbucket.org/pjtr/jmeter-websocket-samplers/downloads/ (need to extract)
- Copy the jars to the
lib/ext
folder inside jmeter
- Open
jmeter.sh
|jmeter.bat
While editing, to make small tests and debug, disable Backend Listener
and enable View Results Tree/Table
to see the exact errors.
In your BigBlueButton server, make sure you remove the 3 connections per user.
Edit /usr/share/bigbluebutton/nginx/bbb-html5.nginx, then comment limit_conn
, and then run sudo systemctl reload nginx
.
https://github.com/bigbluebutton/bigbluebutton/pull/15977/files#diff-b5ecf26038a7030cd5dda45561b30819cefd6109ae8fc2abbbc0fdae36302fa0R7
If you don't do it, you'll start having errors on Open Connection.
This work is based on scripts developed by the staff of RNP - Rede Nacional de Ensino e Pesquisa (https://www.rnp.br/en), the Brazilian NREN, in the context of stress testing Conferência Web (https://conferenciaweb.rnp.br/).