> 400 Teilnehmer auf dem BBB-Hetznerbörse-Moped, Absturz

Tag auch,

wir hatten gerade eben beim ersten Lockdowntag 439 Leute auf dem BBB-Server, der auf einem typischen 32GB-RAM-Server aus der Hetznerboerse laeuft, das war Rekordwert und dann ist da doch irgendwas abgeschmiert, die Leute sind aus den Raeumen geflogen und kamen nicht mehr rein.
Das waren so um die 20 Raeume, keiner > 30 Teilnehmer.

Netzwerklast war mit um die 100MBit/s lange nicht am Anschlag, die CPUs ackerten so um die 75%, die Temperatur war auch noch korrekt.

Hatte das schonmal jemand? Was laeuft da an den Anschlag?
Hab den Server neu gestartet, jetzt laeuft das wieder mit so um die 200 Leute, der Rest hat vermutlich Feierabend gemacht.

Gruss Harry

Hallo Harry,

… ich kann nur spekulieren: also denke ich mal Laut:

in den BBB Dokumentationen habe ich irgendwo mal was von „die Entwickler
sagen max 250 Leute pro BBB Server“ gelesen.

Dann fragt man sich natürlich, was diese Grenze setzt, wo man doch
eigentlich erwarten würde, dass das mit CPU Leistung und RAM skalieren
könnte.

Ich erkläre mir das so:
Der BBB Server ist ein wildes Sammelsurium an verschiedenen Diensten:
kurento für Audio, irgend was für Video und dann noch der Webserver und
vieles mehr.
Wenn es zu viele Leute werden, dann geht das irgend wann schief, weil
die Sachen ja auch alle Zeitkritisch sind: zu aller erst Audio, dann Video.
Wenn da was nicht „in Time“ ankommt, dann gibt es Fehler.
Was kann man machen?
Vielleicht hilft es eine SSD drunter zu haben?
Vielleicht kann man, wenn man schon 32GB RAM hat BBB dazu bewegen mehr
Dienste komplett im Hauptspeicher vor zu halten?
Ich weiß es nicht: vielleicht gibt es irgendwo eine Seite zu „BBB
Optimieren“

… keine große Hilfe: sorry :slight_smile:
Kenne mich da nicht so gut aus.

Viele Grüße

Holger

Danke, vermute auch, dass da wohl irgendwann, irgendwas in diesem Moloch an die Wand faehrt, mach mal ein „ps fax“ auf dem Server, da wird’s Dir schwindelig, Node-Krams neben scheusslichen Java-Prozesslisten.

Eben waren uebrigens 510 Leute online und der Server hat durchgehalten. :slight_smile:
Ich hab Kontakt mit Andreas aufgenommen, er gewaehrt uns Asyl mit seiner Farm.

Edith: SSD duerfte nix bringen, iotop dokumentiert Langeweile auf der Platte:

Total DISK READ :       0.00 B/s | Total DISK WRITE :     311.13 K/s
Actual DISK READ:       0.00 B/s | 
Total DISK READ :       0.00 B/s | Total DISK WRITE :     311.13 K/s
Actual DISK READ:       0.00 B/s | Actual DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                                                                                        
 1184 be/4 syslog      0.00 B/s    9.24 K/s  0.00 %  0.00 % rsyslogd -n [rs:main Q:Reg]
 1989 be/4 www-data    0.00 B/s    3.08 K/s  0.00 %  0.00 % nginx: worker process
 1992 be/4 www-data    0.00 B/s    3.08 K/s  0.00 %  0.00 % nginx: worker process

Gruss Harry

Hallo Harry,

hier mal einen Link zur Berechnung der Auslastung eines BBB.

VG Andre

Hallo Harry,

Edith: SSD duerfte nix bringen, /iotop/ dokumentiert Langeweile auf
der Platte:

Total DISK READ : 0.00 B/s | Total DISK WRITE : 311.13 K/s Actual DISK
READ: 0.00 B/s | Total DISK READ : 0.00 B/s | Total DISK WRITE : 311.13
K/s Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s TID PRIO
USER DISK READ DISK WRITE SWAPIN IO> COMMAND 1184 be/4 syslog 0.00 B/s
9.24 K/s 0.00 % 0.00 % rsyslogd -n [rs:main Q:Reg] 1989 be/4 www-data
0.00 B/s 3.08 K/s 0.00 % 0.00 % nginx: worker process 1992 be/4 www-data
0.00 B/s 3.08 K/s 0.00 % 0.00 % nginx: worker process |

… dann halten die schon fast alles im RAM: super.

Ich schätze, dass mit BBB 2.3 die Sache dann auch noch mehr Leute kann.
400 ist aber schon mal eine gute Zahl: das bedeutet, das sich an meiner
Schule mit 2 BBB Servern auskommen würde.

LG

Holger

Hallo Harry,

wo sehe ich das denn, wie viele Konferenzen mit wie vielen Leuten aktuell laufen?

Viele Grüße
Steffen

Ich hab da ein fieses Spaghetticode-Pythonscript, welches mir die BBB-API abfraegt und die wichtigen Sachen per MQTT auf einen Broker wirft, der von Node-RED abonniert wird, mir den Scheiss in eine InfluxDB-Datenbank schreibt, die mir dann von Grafana visualisert wird.
Das laeuft aber auch auf der Shell mit Ausgaben, MQTT-Schmonz braucht man nicht.

Das geht aber wohl auch eleganter, ich bin aber alt und gehe immer die gleichen Wege…deshalb muesste ich eigentlich weg von jungen Menschen.
Kann Dir das Skript mailen, ich pack das aber nicht hier rein.
Gruss Harry

Hallo Harry,

ich vermute, aus dem Bauchgefühl, dass ich noch etwas jünger bin, aber auch ich gehe immer dieselben Wege. Um Docker z.B. habe ich, bis auf BBB wo das halt so kommt, bislang einen Bogen gemacht, obwohl das sicher durchaus Voreile bringt, z.B. die NC zu dockerisieren - dann müsste ich jetzt nicht den ganzen Server wegen php > 7.2 updaten (oder ein zusätzliches aktuelleres php aus anderen Paketquellen reinpfuschen).

Wenn ich das dann kapiere und mir das was nutzt, gern. Das ganze Drumherum habe ich nämlich nicht. Also müsste ich die Infos über einen Konsolenbefehl abrufen können.

Viele Grüße
Steffen

Das ist das Skript, paar Pythonlibs muss man mit pip oder wie auch immer installieren, der ganze Import-Kram da.
Als Broker nehme ich broker.hivemq.com, der tut im Gegensatz zu test.mosquitto.org zumindest momentan immer.
Die Topics xyz/bbb/… kannst Du auch mit mqtt-dash oder irgendeiner Androidapp fuer mqtt abonnieren/anzeigen, Du siehst aber auch in der Shell die Sitzungen mit der Anzahl der Teilnehmer.

#!/usr/bin/python
#coding:utf-8
#Mit bbb-conf --secret den Endpoint und das Secret anzeigen lassen und hier eintragen
import hashlib, requests
import paho.mqtt.client as mqtt
import psutil
from xml.etree import ElementTree

url = "https://bbb.deinedomainhalt.de/bigbluebutton/" + "api/"
secret = "dasganzesecretvonbbmusshierrein"
meeting_info = "getMeetings"

def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))

client = mqtt.Client()
client.on_connect = on_connect

client.connect("broker.hivemq.com", 1883, 60)

client.loop_start()

m = hashlib.sha1()
m.update(meeting_info + secret)
checksum = m.hexdigest()

request_url = url + meeting_info  + "?checksum=" + checksum
response = requests.get(url=request_url)

tree = ElementTree.fromstring(response.content)

meetings = tree.find("meetings")

sum_audio = 0
sum_video = 0
sum_listening = 0
sum_participants = 0

output_table = []
output_table.append(["ID", "Name", "Moderator", "Teilnehmer", "Nur zuhoeren", "Im VoiceChat", "Mit Video"])

for index, meeting in enumerate(meetings):
        meetingName = meeting.find("meetingName").text
        meetingAudio = int(meeting.find("voiceParticipantCount").text)
        meetingVideo = int(meeting.find("videoCount").text)
        meetingParticipants = int(meeting.find("participantCount").text)
        meetingListening = int(meeting.find("listenerCount").text)
        creator = "-"
        attendees = meeting.find("attendees")
        for attendee in attendees:
                if attendee.find("role").text == "MODERATOR":
                        creator = attendee.find("fullName").text
                        break

        sum_video += meetingVideo
        sum_audio += meetingAudio
        sum_listening += meetingListening
        sum_participants += meetingParticipants

        output_table.append([str(index + 1), meetingName, creator, str(meetingParticipants), str(meetingListening), str(meetingAudio), str(meetingVideo)])

client.publish("xyz/bbb/video", str(sum_video))
client.publish("xyz/bbb/audio", str(sum_audio))
client.publish("xyz/bbb/participants", str(sum_participants))
client.publish("xyz/bbb/cpu", str(psutil.cpu_percent()))
        
output_table.append(["", "", "", "", "", "", ""])
output_table.append(["", "Gesamt", "", str(sum_participants), str(sum_listening), str(sum_audio), str(sum_video)])

max_width = [0, 0, 0, 0, 0, 0, 0]
for row in output_table:
        for index, data in enumerate(row):
                max_width[index] = max(len(data), max_width[index])

for row in output_table:
        for index, data in enumerate(row):
                print (data.ljust(max_width[index])),
        print ("\n"),

Evtl node auf node 10 aktualisieren? 8 ist sehr alt und 10 ist bislang die wohl schnellste Version.
Ich habe auf einem hetzer-Server max. 130 Leute gehabt und bei mir fliegen auch schon bei weniger einige Teilnehmer immer raus. Hat jemand eine Idee zur Fehlersuche? Der Großteil ist aber sicher drin und es läuft prima. 10% CPU-Auslastung, 32GB sind auch genug. BBB macht einen soliden Eindruck

In einem irren Konglomerat an Einzeldiensten wie BBB, die von den Entwicklern kunstvoll zusammengestrickt wurden, wuerde ich da grosse Probleme bzgl. Abwaertskompatibilitaet erwarten, ich mag falsch liegen, aber das duerfte einer der komplizierteren Wege sein, den Server mit Vollgas an die Wand zu fahren oder gibt es dafuer irgendwo eine Empfehlung?

Oft liegt das Problem bei den Teilnehmern, mieses WLAN, schlechtes Internet, miese Devices, die mit irgendwas anderem beschaeftigt sind, Fehlbedienung…

Bei 130 Leuten laeuft unser Server im Standgas, RAM spielt uebrigens ueberhaupt keine Rolle, das muss ja alles gleich raus. Die Kerne werden gut geheizt, da bringt mehr auf alle Faelle mehr.

So sieht das bei uns gerade aus:

Ich habe node 10.23 installiert, es läuft ohne Probleme (mal abgesehen von den o.g. Ausnahmen). Was mich wundert, ist dass mir zwei Schüler schrieben, einmal iPhone 6 und einmal MacBook Air mit Safari, dass es nciht geht. Ich habe erstmal keinen Grund davon auszugehen, dass es an den Geräten liegt. Aber letztendlich weiß man es nicht. Solange es keine einheitlichen Geräte bei uns gibt, wird die Fehlersuche immer schwierig sein.

teilst Du Dein Grafana-Dashboard? Ich hab das von bbb genommen, aber das ist nur so halb übersichtlich. :slight_smile:

Ich hab auf dem Server das obige Skript laufen, welches mir die aktuellen Werte per MQTT auf broker.hivemq.com published. Die Topics abonniere ich zuhause auf einem uralten Banana-Pi mit Node-RED, schreibe sie mit Node-RED in InfluxDB und visualisieren sie mit Grafana, laeuft auch auf dem Pi. Der Pi macht noch meine Hausautomatisierung, Nextcloud usw. usf.
Ich hab noch zwei 4er Pi hier liegen und einen ganzen Zoo 3er, 2er, 1er und noch Orange Pis, hatte da mal wohl einen Fetish - arbeiten tut aber nur der olle Banana-Pi.

Was meinst Du mit „teilen“? Exportieren? Kann ich machen, das ist aber auch nur zusammengeklickt und wird gefuettert von InfluxDB auf dem Pi.

Ja ne, dann nicht :slight_smile: ich hab Homeassistant laufen auf meinem Pi4, aber da will ich jetzt nicht noch zusätzlich Zeit investieren. Mein Fehler war auch, dass ich InfluxDB2 installiert habe und nicht 1.x Für 2 gibt es leider überall nur mangelnde Unterstützung, aber das habe ich erst bemerkt, als es zu spät war. Jetzt muss ich immer zwei Fenster aufmachen, damit ich an meine Daten komme. InfluxDB ist aber auch recht schön mit zu arbeiten.
Ich hole mir meine Serverdaten immer mit Telegraf ab, das ist recht praktisch und läuft überall.

Hallo,

auf unserem BBB-Server war vorhin bei der Info-Veranstaltung zu den Testungen für die 5er und 6er Eltern laut SL bei 100 Teilnehmern Schluss („Da geht gar nichts“).
Ich habe kein Monitoring installiert und konnte mir die Auslastung nicht live anschauen, aber das finde ich echt super wenig.
Wobei man die 300+ vielleicht einfach nur erreicht, wenn sich die Teilnehmer auf mehrere Konferenzen verteilen und nicht >100 Teilnehmer in derselben Konferenz sind.

Für die Außenwahrnehmung von BBB natürlich fatal, da Zoom, Webex, Teams & Co das zumindest in der öffentlichen Wahrnehmung das „locker“ können und mit diesen Diensten in der Tat auch große Veranstaltungen abgewickelt werden :thinking::man_shrugging:

Viele Grüße
Steffen

Hallo Steffen,

das ist schade. Aber auch ein guter Hinweis auf diejenigen, die eine größere Veranstaltung planen. Ich hatte mal testweise 80 Schüler in eine Konferenz geholt. Mit Screensharing, 1 Kamera, der Rest mit stummgeschaltenen Mikros (also nicht nur Zuhören), da war die CPU erst bei 30% oder so. Hetzner Serverbörse. Von daher hätte ich mehr gleichzeitige Teilnehmer in einer Konferenz erwartet.
VG
Christian

Hallo Steffen,

nö.
Ich hatte schon mehrfach Sitzungen in denen 180 Leute gleichzeitig waren: dabei gab es keine Probleme.

Leute die als Fehlerbeschreibung „da geht gar nichts“ geben mag ich ja besonders. Da würde ich erst mal sagen: dann war wohl die URL falsch …

Meine BBB Server machen noch immer am Tag immer wieder über 300 Teilnehmer.

LG

Holger

Hallo Holger,

das „da geht nichts“ kam vom SL ca. 15 min nach Veranstaltungsbeginn und resultiert sicher aus der Stresssituation, „was mache ich denn jetzt“.

Wenn du Sitzungen mit 180 Teilnehmern hattest, dann frage ich mich wirklich, warum unser Server bei 100 Teilnehmern die Schotten dicht gemacht hat. Ist ja dieselbe Hardware mit derselben Anbindung bei Hetzner?!?

Kann man da nachträglich noch was debuggen?

Ich denke jedenfalls nicht, dass der SL wegen der Außenwirkung nochmal einfach so auf gut Glück auf unseren BBB-Server setzen wird. :frowning:

Viele Grüße
Steffen

Hallo Steffen,
ich habe 2 BBB bei Hetzner und mit durchschnittlich 140TN/pro Server.
Das läuft prima und ohne Probleme.

Gab es denn einer der bekannten Fehler: 1004 oder 1020?
Habt ihr einen Turn-Server im Einsatz?

VG Andreas