Massives Performance Problem mit Python / Seafile Server

Rosendoktor

Well-Known Member
Hallo zusammen!

hat hier jemand von Euch einen Seafile Server (zur Dateisynchronisation) auf FreeBSD am Laufen?

Nachdem ich seit Jahren einen Seafile Server unter Debian betreibe, hab' ich die Tage mal einen weiteren Seafile Server unter FreeBSD installiert, da auf dem Gerät noch viel ungenutzter Speicher zur Verfügung steht.

Installiert wurde das Ganze aus dem Repository. Nach dem ersten Konfigurieren lief der Seafile Server auch.

Aber sowas von grottenlahm, dass das so schlicht nicht brauchbar war.

Erster Performancevergleich: Vom Anmelden auf der Loginseite des Webinterfaces (der Webserver heisst seahub) bis zu vollständig aufgebauten "Home" Seite: Debian 1 Sekunde, FreeBSD 29 Sekunden. :ugly:

Während der Wartezeit waren ein bis drei Python Prozesse mit 98% bis 100% CPU Auslastung aktiv. Bei jedem Klick im Webinterface das gleiche, mehrere Python Prozesse (bis zu vier), und unter Debian zack wie nix, unter FreeBSD schnarch...

Also, mal geschaut... Der FreeBSD Port ist nicht ganz sauber, damit es lief musste manuell ein Softlink innerhalb des Seafile Installation (/usr/local/www/haiwen/...) auf /usr/local/bin/gunicorn gesetzt werden. Zudem waren die Rechte der meisten Dateien/Verzeichnisse auf "root:seafile" und "rwxr.xr.x" gesetzt, was den unter "seafile:seafile" laufenden Python Prozess daran gehindert hat, seine pycache Verzeichnisse für vorkompilierten Bytecode (oder so, bin kein Python Experte) anzulegen.

Also die Rechte der gesamten Installation auf "seafile:seafile" gesetzt. Danach dauerte das Anmelden "nur" noch 9 Sekunden, es wurden pycache Verzeichnisse mit *.pyc Inhalten erzeugt, und es waren wieder bis zu drei Python Prozesse mit voller CPU Auslastung aktiv. Aber immer noch viel zu lahm bei jeder Navigation im Webinterface.

Als nächstes wie empfohlen das Caching für den seahub Webserver aktiviert, man kann entweder dateibasiertes Caching (/tmp/seahub_cache) oder besser memcached nutzen. Beides funktioniert, es werden Daten unter /tmp/seahub_cache abgelegt bzw. es findet Kommunikation (per tcpdump sichtbar) zuwischen seahub und memcached statt.

An der Performance hat sich dadurch aber rein gar nichts gebessert...

Woran kann es denn noch liegen, dass Python unter FreeBSD beim Aufbau einer sehr einfachen Webseite im Vergleich zu einer Installation auf Debian um den Faktor 10 langsamer ist?

Gibt es irgendwelche bekannten Flaschenhälse oder so? Was könnte ich noch prüfen?

Grüße,

Robert

EDIT: Hab auch schon probeweise ASLR und W^X abgeschaltet, bringt auch nix...
 
Zuletzt bearbeitet:
So, Problem gelöst. Für den unwahrscheinlichen Fall dass jemand das gleiche Problem irgendwann mal haben sollte:

Der vom Webinterface des Seafile Servers verwendete Applikationsserver gunicorn wird in FreeBSD nur mit der Standard worker class "sync" compiliert. Wenn man ihn aus den Ports selbst baut und die asynchronen worker classes in der config aktiviert, kann man einen dieser (z.B. "gevent") für den Seafille Server verwenden und nun flutscht es... :) Das war dann meine heutige Nachtschicht...
 
Zurück
Oben