Nextcloud / php (fpm) tuning

HI zusammen,

ich habe die nextcloud auf einem server über nginx + php7.2-fpm installiert.
Ich bin mir über die TUning parameter nicht ganz klar, kann mir jemand sagen, was er da hat?

File: /etc/php/7.2/fpm/pool.d/www.conf

pm = dynamic
pm.max_children = 40
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 15

Gibt es außerdem noch andere Parameter an denen man tunen kann?

VG, Tobias

Hallo Tobias, das kommt bisschen auf deinen Server drauf an was er abkann und wieviel Nutzer du hast. Ich habe bei mir auf meinem Server mit 32 GB RAM und gehe bei php FPM mit PM=onDemand, gehe auf 350 max_Children (mit 2GB Speicherlimit) je Child und max_request von 1000. Habe aber ein Sicherheitsskript als Cronjob aktiviert, dass alle 2min überpüft, ob der RAM unter 90% belegt ist und notfalls restartet er die PHP FPM, bevor der Server total überlastet ist. Habe damit mit 400SuS sehr gute Erfahrungen gemacht.

Liebe Grüße
Sebastian

Hallo Sebastian,

vielen Dank für die Rückmeldung. Darf ich noch auf Rückantworten für meine Rückfragen hoffen?

Ok.

  • Verstehe ich die Zahl 350 richtig, weil du in der Größenordnung Schüler hast und gleichzeitig 350 requests abgehandelt werden könnten?
  • Werden die 2GB Speicherlimit in „memory_limit“ in php.ini einstellt?
  • max_request ok. Dadurch lebt der einzelne Thread/child länger und es kommt seltener zum kontextswitch (oder wie das heißt)
  • Wie groß ist den pm.process_idle_timeout ? Von welchen Zeiträumen reden wir hier denn, in denen alte Prozesse gekillt oder durch max_requests > 1000 resetet werden?
  • meinst du damit die potentiellen Nutzer sind 400 (maximal) oder von der Gesamtheit waren 400 Nutzer „gleichzeitig“ online?

Super, danke für deine Anregungen.
ICh werde das mal an meine Schule anpassen: 1000 potentielle Nutzer, zur Zeit: 687 in den letzten 24 Stunden.

VG, Tobias

Hallo Tobias, ja, ich habe am Anfang enorme Perfomance Probleme gehabt, unter anderem weil Talk zu der Version noch keine Primary Keys in der Datenbank hatte. Und da der Server stand-alone und nicht Virtualisiert ist,wollte ich schauen, dass ich das Maximum für SuS raushole. Hatte am Anfang das Problem, dass Seiten bei starker Nutzungszahl dann langsam geladen haben. Daher habe ich mit den php-Fpm rumgespielt. Inzwischen läuft er sehr Perfomant bei ca. 300 gleichzeitigen Nutzern und insgesamt auf 450 angelegte Bentuzer, sogar die OnlyOffice Intanzen habe ich deutlich hochgeschraubt auf 100. Jedoch habe ich alles mit einem Speicherskript abgesichert, nicht dass der RAM volläuft und dadurch dann die Performance leidet. (Wir wollen ja nicht dass die SuS zu lange warten). FAlls Interesse am Skript, gerne einfach melden.

Fangen wir mir den Einstellungen zur Leistung an memory_limit wird ja 1024MB empfohlen, ich habe es gleich auf 2048MB hochgeschraubt. Dass ist ja nur ein Limit, die meisten Prozesse sind irgendwo bei 200MB, kann man gut mit htop anschauen, max_execution_time habe ich auf 180 gesetzt. (das wird alles in der php.ini eingestellt.)

Parallel zum max_request habe ich aber auch bei der Datenbankanbindung die Anzahl gleichzeitiger Verbindungen auf 1500 hochgeschraubt, die war bei mir zuvor auf 150 beschränkt. An der pm.process_idle_timeout habe ich nichts geändert.

Zu Stoßzeiten zwischen 10 und 12 Uhr habe ich so 300 Nutzer auf der Plattform. Hier wird der Arbeitsspeicher auf der Maschine bis zu 25 GB von 32 GB belegt, jedoch die Perfomance der nextcloud mit Talk und OnlyOffice ist immer noch klasse.

Wieviel RAM hast du zur Verfügung und welche Anwendungen bietest du den SuS an?

HAllo Sebastian,
ah, sehr interessant.
Ich habe Talk abgeschalten, weil ich so weit wie du nicht vorgedrungen war. Nach einem Test mit 15 Schülern war der Server dicht (Seite ludt viel zu lange für alles) und weil der Datenaustausch wichtiger war als das „Talk“, habe ich es abgestellt. Das war Anfang-Corona und ein Talk-update seither habe ich in erinnerung. Hilft das („primary keys“)

Darüberhinaus habe ich auch erst später angefangen an php-fpm rumzuspielen, weil selbst ohne Talk es immerwieder kleinere Verbindungsabbrüche gibt bei ca. 200 gleichzeitigen Nutzern (gefühlt, nicht gemessen, ich nehme das den Output von „System“).

Ich habe 12GB RAM. Ich verstehe korrekt, dass du die PArameter nicht so wählst, dass maximal 32 GB belegt werden können, sondern sicher auch mehr, aber restartest mit dem script lieber php-fpm?

OnlyOffice / CollaboraOffice ist noch so eine Baustelle. Ich will aus ideologischen Gründen (docx-default) nicht zu onlyoffice wechseln und bei CollaboraOffice gibt es eine Beschränkung bei (20? so aus der Erinnerung).

Würde dich gerne noch um einen Rat bitten, ob ich bei „nur“ 12GB RAM etwas anderes machen soll, aber ich fasse jetzt erstmal zusammen:

/etc/php/7.2/fpm/php.ini
max_execution_time=180
memory_limit = 2048M
/etc/php/7.2/fpm/pool.d/www.conf
pm = ondemand
pm.max_children = 350
pm.max_requests = 1000

Ich habe mariadb als DB und gehe ich richtig in der Annahme, dass du

/etc/mysql/my.conf
[mysqld]
max_connections = 1500

geändert hast? Hast du auch noch file descriptoren (ulimit) hochgesetzt? Bei der systemd-geschichte weiß ich wieder nicht wo das geht, sorry, kannst du mir nochmal helfen?

Herzlichen Dank, wirklich, dass du dir hier Zeit nimmst für die Antworten!
Und ja, ich hätte das script gerne.
VG, Tobias

P.S. statt Talk haben wir jetzt Matrix+Riot installiert. Wenn ich das mit Talk besser verstanden hätte…

Hallo Tobias,

12 GB ist ein bisschen dünn, ich selbst arbeite mit ähnlicher Nutzerzahl am 32GB und hätte im Nachhinein lieber mich für 64GB entscheiden sollen. Naja, falls möglich, eventuell RAM hochsetzen falls du virtuell arbeitest.

Talk war bei mir gleich wichtig, weil wir nur so Kontakt zu den SuS halten konnten, primär beim Schreiben. Talk hatte mir der Version damals keine PrimaryKeys in der DAtenbank, daher war Talk in Version 8.0.5 damlas sehr ressourcenlastig auf dem Server bei den Abfragen. Mit Version 8.0.6 und 8.0.7 kamen die Verbesserungen Anfang April. ( https://apps.nextcloud.com/apps/spreed/releases?platform=18#18) Da ich aber Ende März trotzdem mit der Last zu kämpfen hatte, habe ich mich für das Skript entschieden, dass den Server absichert. Mit dem Scipt habe ich die PErfomance sichergestellt (RAM Belegung bis 90%), weil sobald RAM ausgelagert wird, ist die LAdezeit deutlich erhöht. Lieber Resart php-FPM zweimal am Tag als Server dauerhaft schwer erreichbar. Nach den Osterferien hat es noch zu keinem Reset der php-fpm mehr geführt. (Skript schick ich als Nachricht)

Die Only Office Beschränkung existiert, kann man aber im Quellcode an drei Stellen anpassen. Habe jetzt 100 Instanzen erlaubt auf dem Server und auch hier macht der RAM mit.(SuS mussten tielweise den Broswercache löschen, damit die Einstellung ging, weil die Fehlermeldung sich im Cache eingespeichert hatte), mehr hierzu unter https://help.nextcloud.com/t/onlyoffice-community-edition-without-20-connections-limitation/59269/47

Bezüglich dem RAM und phpFPM ist htop dein bester Freund. Beobachten und die Werte bei Bedarf anpassen. Ich vermute, dass du max_children nach unten korrigieren musst.

Das mit der Datenbank ist korrekt, das habe ich so nach oben geschraubt. Hier hatte ich anfangs auch viele Fehlermeldungen, weil die Anfragen nicht durchgekommen sind zur Zeiten der Sitzenauslastung.

An file descriptoren [(ulimit)] habe ich bisher nichts gemacht, da hatte ich auch keine Probleme bisher mit.

LG Sebastian

Hallo Tobias!

Aus den selben Überlegungen und wegen der schlechten Unterstützung von onlyoffice für open-document-Formate setzen wir auch auf collabora.

Die Beschränkung auf 20 Benutzer gibt es bei uns nicht, nur ein Infofenster ab 20 Vetbindungen oder 15 Benutzer (?) dass dies „blablabla“. Info wegklicken und normal weiterarbeiten - läuft.

Bestimmt kann man die Info irgendwo abschalten, hab aber noch nicht danach gesucht.

Gruß - Rainer

Hallo Rainer, vielen Dank für die Info, das rettet mich (und Collabora) vorerst. Vielen Dank!
Tatsächlich bin ich selbst noch nie in die Situation gekommen, ich vermute nur, dass es Schülern und Lehrern jetzt eigentlich so gehen muss, wenn ich 100-200 online Nutzer sehe.

Viele Grüß,e Tobias

Hallo Sebastian,

ich habe jetzt 64GB RAM (danke Virtualisierung!) und die Zahl der max_children auf 400 hochgesetzt und lausche mal iftop und htop. Ich vermute, jetzt ist die I-Net-Verbindung (endlich!) der Flaschenhals :slight_smile:

Noch eine Frage: Als memcache-locking hab ich redis eingeschalten. Kann man da noch etwas tunen?

 <enable_avatars>yes</enable_avatars>
<enable_previews>yes</enable_previews>
<memcache.local>\OC\Memcache\APCu</memcache.local>
<memcache.distributed>none</memcache.distributed>
<filelocking.enabled>yes</filelocking.enabled>
<memcache.locking>\OC\Memcache\Redis</memcache.locking>

Zum Beispiel Redis irgendwie im Speicher vorhalten und es nicht auf die Platte synchen lassen. Besser habe ich Redis nicht verstanden.

VG, Tobias

so sieht mein Abschnitt in der .config aus
‚memcache.local‘ => ‚\OC\Memcache\Redis‘,
‚filelocking.enabled‘ => ‚true‘,
‚filelocking.ttl‘ => 3600,
‚memcache.distributed‘ => ‚\OC\Memcache\Redis‘,
‚memcache.locking‘ => ‚\OC\Memcache\Redis‘,
‚redis‘ =>
array (
‚host‘ => ‚/var/run/redis/redis-server.sock‘,
‚port‘ => 0,
‚timeout‘ => 0.0,
),
Habe redis als sock laufen, frag mich jetzt aber nicht warum ich mich damals dafür entschieden habe.

1 „Gefällt mir“

Ich möchte auch hier auf dem Server das Monitoring hochfahren, ähnlich wie bei bbb. Muss mal schauen was es für die Nextcloud schon gibt…

1 „Gefällt mir“

Argh, danke. Ich war eigentlich überzeugt, dass ich filelocking schon drin habe. Den Tipp hatte ich ja eigentlich schon. Vielen Dank nochmal.
Habe schon jetzt das Gefühl, dass es schneller geht…

Vielen Dank, wenn du deine Ergebnisse teilst…

VG, Tobias

Hallo @Bellm,
ich habe mal den rlimit=0 gesetzt, siehe meine Probleme hier: Nextcloud-Installation ... ein paar Fragen vorab - #33 von Tobias
wie dort auch gesagt: keine Ahnung ob das Teil des Problems war.
VG, Tobias

Also ich glaube eher nicht dass das wirklich ein Problem ist.