PHP und Datenbank korrekt dimensionieren Mit diesen Tipps beschleunigen Sie Ihre Nextcloud-Installation

Von Thomas Joos 9 min Lesedauer

Anbieter zum Thema

Eine langsame Nextcloud weist häufig auf ungenaue Einstellungen in PHP, Datenbank, Caching und Hintergrundprozessen hin. Durch gezielte Anpassungen sinkt die Systemlast und die Reaktionszeit verbessert sich spürbar. Die wichtigsten Stellschrauben lassen sich in jeder Installation direkt optimieren.

So optimieren Sie Nextcloud: Zielgerichtete Anpassungen in PHP und Datenbank für schnellere Reaktionszeiten und verbesserte Systemleistung.(Bild: ©  Olivier Le Moal - stock.adobe.com)
So optimieren Sie Nextcloud: Zielgerichtete Anpassungen in PHP und Datenbank für schnellere Reaktionszeiten und verbesserte Systemleistung.
(Bild: © Olivier Le Moal - stock.adobe.com)

Die Geschwindigkeit einer Nextcloud hängt zuerst von einer korrekt konfigurierten PHP-Umgebung ab. Administratoren öffnen die Datei „php.ini“ im jeweiligen PHP-Verzeichnis. Dieses hängt vom Installationsverzeichnis von Nextcloud ab. Ist dieses nicht bekannt, weil die Nextcloud-Installation schon eine Weile her ist, lässt sich das schnell herausfinden.

Wo liegt die Nextcloud-Instanz?

Apache speichert die Konfiguration in „/etc/apache2/sites-available“. Die aktive Datei trägt oft den Namen der Domain, zum Beispiel nextcloud.conf. In dieser Datei steht eine Zeile wie:

DocumentRoot /var/www/nextcloud

Genau der Pfad in dieser Zeile ist das Installationsverzeichnis der Nextcloud. Wenn dort etwas anderes steht, zum Beispiel „/srv/web/nextcloud“, dann liegt die Installation dort. Befehl zum Anzeigen aller aktiven Apache-Hosts:

apache2ctl -S

Der Befehl zeigt ebenfalls die verwendeten DocumentRoot-Pfade an. Der Webserver nginx speichert die Konfiguration ebenfalls in „/etc/nginx/sites-available“. Die Datei für die Nextcloud-Domain enthält einen Block „server { ... }“. Darin gibt es eine Zeile wie:

root /var/www/nextcloud;

Der Pfad in dieser Zeile ist das Installationsverzeichnis der Nextcloud. Befehl zum Anzeigen der geladenen Konfiguration:

nginx -T

Die Ausgabe zeigt jede „root“-Zeile aller Serverblöcke, inklusive des Pfads zur Nextcloud.

Wenn der Pfad unbekannt ist oder mehrere Installationen existieren, gehört die Datei „config.php“ im Verzeichnis „config“ zur Nextcloud-Installation. Man findet sie mit:

sudo find / -type f -name config.php 2>/dev/null

Der Ordner, in dem diese Datei liegt, ist die Nextcloud-Installation.

Konfigurationsdabei bearbeiten

Bearbeiten lassen sich die Dateien mit beliebigen Editoren, zum Beispiel vi oder nano. Die Datei „php.ini“ kann es mehrfach im System geben. Wichtig ist für die Bearbeitung die Datei, die Apache oder ngingx nutzen. Auch die eingesetzte Variante bestimmt, wo die jeweilige ini-Datei gespeichert ist. Anzeigen lässt sich das mit:

sudo apache2ctl -M | grep php

und

php –ini

Sobald bekannt ist, welche Konfigurationsdateien genutzt werden, wird diese geöffnet und bearbeitet, zum Beispiel mit:

sudo nano /etc/php/8.3/fpm/php.ini

Wichtig ist, nach Änderungen die notwendigen Dienste neu zu starten:

sudo systemctl restart php8.3-fpmsudo systemctl restart apache2

Der Parameter „memory_limit“ erhält einen Wert von mindestens vier Gigabyte. Eine erhöhte Speicherzuweisung verhindert Engpässe bei Aufgaben wie Vorschau-Erstellung oder Dateioperationen und reduziert interne Umwege innerhalb einzelner PHP-Prozesse. Die beiden Parameter „upload_max_filesize“ und „post_max_size“ müssen denselben Wert besitzen, um Abläufe beim Hochladen großer Dateien stabil zu halten. Die Verarbeitung bleibt dadurch konsistent und die Anzahl abgebrochener Uploads sinkt.

Der Eintrag „date.timezone“ definiert die lokale Zeitzone, damit Protokolle und zeitabhängige Routinen einheitlich arbeiten. Der Parameter „output_buffering“ wird auf „Off“ gesetzt. Dadurch verzichtet PHP auf eine Zwischenspeicherung von Ausgaben, was die Reaktionszeit bei WebDAV-Operationen spürbar verkürzt und blockierende Prozesse reduziert. Jede Änderung wird erst nach einem Neustart des PHP-Dienstes aktiv, daher folgt unmittelbar ein Restart des Apache- oder FPM-Dienstes:

sudo systemctl restart php8.3-fpmsudo systemctl restart apache2

OPcache für effiziente Codebereitstellung

OPcache bildet eine der wirksamsten Maßnahmen für eine schnelle Nextcloud. Der Interpreter lädt den kompilierten PHP-Code direkt aus dem Speicher und nicht aus dem Dateisystem. In der „php.ini“ werden daher OPcache mit „opcache.enable“ und zusätzlich „opcache.enable_cli“, damit auch OCC-Befehle und Cronjobs vom Cache profitieren, geladen.

Der Parameter „opcache.memory_consumption“ erhält eine Größe von mindestens zwei Gigabyte, wodurch genügend Speicher für häufig genutzte Skripte bereitsteht. Der interne Speicher für Zeichenketten wird über „opcache.interned_strings_buffer“ auf mindestens 64 Megabyte gesetzt, was Seitenaufrufe mit wiederkehrenden Strings beschleunigt.

Die Einstellung „opcache.revalidate_freq“ bleibt auf dem Wert 60, damit der Cache nur bei relevanten Dateiänderungen prüft und das System nicht permanent Dateien neu einliest. Für Nextcloud entscheidend bleibt die Anzahl der beschleunigten Dateien über „opcache.max_accelerated_files“. Viele Installationen mit zahlreichen Apps übersteigen schnell den Standardwert und profitieren stark von einer Erhöhung auf Werte ab dreißigtausend. Dadurch sinkt die Anzahl von Festplattenzugriffen deutlich, und die Ladezeiten der Weboberfläche verkürzen sich merklich.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Cloud Computing

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung. Die Einwilligungserklärung bezieht sich u. a. auf die Zusendung von redaktionellen Newslettern per E-Mail und auf den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern (z. B. LinkedIn, Google, Meta).

Aufklappen für Details zu Ihrer Einwilligung
Bildergalerie
Bildergalerie mit 6 Bildern

MariaDB auf hohe Last vorbereiten

Die Datei für die Datenbankkonfiguration liegt in der Regel unter „/etc/mysql/mariadb.conf.d“. Um die Datei zu öffnen, wird ebenfalls wieder ein herkömmlicher Editor verwendet, zum Beispiel

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Dort passen Administratoren die Parameter im Abschnitt für „InnoDB“ an. Der Wert „innodb_buffer_pool_size“ nutzt idealerweise die Hälfte des verfügbaren Arbeitsspeichers des Servers. Eine Instanz mit acht Gigabyte RAM erhält vier Gigabyte für den Buffer-Pool. Je größer dieser Bereich ist, desto mehr Tabelleninhalte verarbeitet die Datenbank ohne Zugriff auf das Dateisystem.

Ergänzend bietet „innodb_log_file_size“ eine größere Logdatei, damit Lastspitzen geglättet werden und Schreibvorgänge ohne Verzögerung ablaufen. Der Parameter „innodb_flush_method“ bleibt auf „O_DIRECT“, da dadurch doppeltes Caching verhindert wird und der Datenträger nicht unnötig belastet wird.

Die Werte „innodb_read_io_threads“ und „innodb_write_io_threads“ steuern parallele Lese- und Schreiboperationen. Mehr Threads verbessern die Effizienz bei gleichzeitigen Abfragen, was in aktiven Umgebungen zu deutlich geringerem Antwortverzug führt. Die Variable „max_connections“ bestimmt die maximale Zahl gleichzeitiger Datenbankverbindungen. Ein Wert im Bereich von zweihundert verhindert Engpässe bei steigender Nutzerzahl, ohne die Datenbank zu überlasten. Änderungen werden wirksam, sobald der Datenbankdienst neu startet.

Redis als Schlüssel für schnelles Filelocking

Redis ersetzt das Filelocking über die Datenbank und sorgt für spürbar stabilere Dateioperationen. Der Redis-Dienst wird auf einem Ubuntu-Server über den Paketmanager installiert. Administratoren rufen dazu folgenden Befehl auf:

sudo apt install redis-server

. Damit wird der Redis-Dienst eingerichtet und automatisch gestartet. Anschließend prüfen Administratoren, ob PHP Redis korrekt nutzen kann. Dafür muss das PHP-Modul geladen sein, das Redis mit PHP verbindet.

Die Installation von Redis kann auf Paketkonflikte treffen, wenn die verfügbaren Versionen von „redis-server“ und „redis-tools“ nicht exakt übereinstimmen. Tritt während der Installation ein Hinweis auf zurückgehaltene oder nicht erfüllte Abhängigkeiten auf, prüfen Administratoren zunächst die verfügbaren Paketversionen mit

apt-cache policy redis-server redis-tools

Weichen die Versionen voneinander ab, wird die zur Serverversion passende Ausgabe von „redis-tools“ gezielt installiert, bevor „redis-server“ erneut aufgerufen wird. In der Praxis erfolgt dies durch einen Reparaturlauf der Paketverwaltung per „apt -f install“ oder durch ein vollständiges Aktualisieren der Systempakete per „apt full-upgrade“, wodurch Ubuntu die Pakete wieder in einen konsistenten Zustand bringt. Sobald beide Komponenten in der passenden Version vorliegen, lässt sich Redis regulär installieren und der Dienst steht unmittelbar für die Einbindung in Nextcloud bereit.

Wird die Aktualisierung zurückgehalten, muss die Konfiguration dazu erst freigegeben werden:

sudo apt-mark unhold redis-tools redis-server

. Danach erfolgt die Aktualisierung mit

sudo apt updatesudo apt upgrade

Ob Redis bereits installiert ist und welche Version zum Einsatz kommt, lässt sich ebenfalls im Terminal herausfinden:

dpkg -l | grep redissystemctl status redis-server

Nach der Aktualisierung des Paketbestands installiert das System die zum Redis-Server passenden Build-Versionen der zugehörigen Werkzeuge. Die zuvor eventuell vorhandene Inkonsistenz zwischen älteren und neueren Paketständen wird damit vollständig aufgelöst. Die Ausgabe der Paketverwaltung bestätigt zum Beispiel die Installation der Version 5:7.0.15-1ubuntu0.24.04.2 sowohl für „redis-server“ als auch für „redis-tools“. Anschließend belegt die Abfrage über „dpkg -l“ den korrekten Paketstatus, da beide Komponenten nun mit identischer Versionsbezeichnung vorliegen. Zusätzlich ist das PHP-Modul für die Anbindung an Redis installiert, sodass PHP-FPM den Dienst unmittelbar nutzen kann.

Die Kontrolle des Systemdienstes liefert den notwendigen Nachweis für einen funktionsfähigen Redis-Server. Die Statusabfrage zeigt einen aktiven Dienst, der eingehende Verbindungen auf der lokalen Adresse 127.0.0.1 und dem Standardport 6379 akzeptiert. Die Prozessinformationen geben ergänzend Auskunft über Speicherbedarf, Laufzeit und Ausführungsstatus, was bei der Bewertung eines stabilen Betriebs unterstützt. Mit diesem Zustand ist Redis vollständig in das System eingebunden und bereit, für Caching-Mechanismen und das Filelocking von Nextcloud genutzt zu werden.

Damit Redis im Zusammenhang mit Nextcloud wirksam eingesetzt wird, folgt anschließend die Anpassung der zentralen Konfigurationsdatei der Instanz. Diese Datei befindet sich in der vorliegenden Installation unter „/var/www/html/config/config.php“. Auch hier hängt der Speicherort von der jeweiligen Installation ab. Dort wird die lokale Cache-Verwaltung auf APCu gelegt und das Filelocking auf Redis umgestellt. Die Konfiguration verweist auf den lokalen Redis-Dienst und den Standardport, wodurch Nextcloud Filelocks im Arbeitsspeicher ablegt und nicht mehr über die Datenbank erzeugt. Ergänzend bleibt sicherzustellen, dass APCu auch im Kontext der Kommandozeile wirksam ist, da Cronjobs und OCC-Befehle sonst weiterhin ohne lokales Caching laufen. Die entsprechende Einstellung „apc.enable_cli“ wird hierfür in der APCu-Konfigurationsdatei aktiviert. Nach einem Neustart von PHP-FPM und Apache arbeitet die komplette Instanz mit Redis-Unterstützung.

Dieser Ablauf stellt sicher, dass Redis als performante Cache- und Locking-Komponente zuverlässig zur Verfügung steht und die Last auf der Datenbank deutlich sinkt. Die Umgebung reagiert schneller, da Dateizugriffe und Metadatenabfragen im Speicher verarbeitet werden und nicht mehr in Form von zusätzlichen Datenbanktransaktionen auftreten.

Erst wenn Redis und das PHP-Modul vorhanden sind, kann Nextcloud Redis auch tatsächlich verwenden. Anschließend öffnet ein Administrator die Datei „config.php“ im Nextcloud-Installationsverzeichnis, zum Beispiel im Verzeichnis „/var/www/html/config/config.php“. In der Datei „config.php“ von Nextcloud stehen die relevanten Parameter. Der Eintrag „filelocking.enabled“ bleibt aktiviert. Die Zeile für das lokale Caching verweist auf APCu über „memcache.local“. Der Abschnitt für das Locking definiert Redis über „memcache.locking“. Die Verbindung erfolgt über die Angabe des Hosts, in der Regel „localhost“, und den Standardport. Zusätzlich verlangt APCu einen Eintrag in der eigenen Ini-Datei. Der Parameter „apc.enable_cli“ wird auf den Wert „1“ gesetzt. Dadurch profitieren OCC-Prozesse und Cronjobs ebenfalls vom Cache und reduzieren die Last auf PHP und die Datenbank. Nach Abschluss der Konfiguration startet der Webserver neu, wodurch alle Module korrekt eingebunden werden.

Hintergrundprozesse zuverlässig ausführen

Viele Installationen verlangsamen mit der Zeit, weil Hintergrundaufgaben nicht regelmäßig starten. Nextcloud nutzt standardmäßig den Modus Ajax, der nur bei Seitenaufrufen aktive Prozesse startet. Das führt mittelfristig zu inkonsistenten Daten, nicht gelöschten Sessions und unerledigten Wartungsabläufen.

Administratoren wechseln daher in den Cron-Modus und aktivieren diesen in den Systemeinstellungen der Instanz. Anschließend wird über den Cron-Tab des Webservers-Benutzers ein Eintrag erstellt, der die Datei „cron.php“ alle fünf Minuten aufruft. Der zuständige Benutzer bleibt „www-data“, damit Nextcloud die richtigen Berechtigungen erhält. Sobald der Cron-Dienst aktiv arbeitet, bleiben Wartungsaufgaben zuverlässig ausgeführt und das System reagiert stabil, selbst bei hoher Last.

Versionsstand gezielt wählen

Die Aktualität der Nextcloud-Version spielt eine wesentliche Rolle für die Gesamtperformance, da neue Hauptversionen regelmäßig Optimierungen für OPcache, Datenbankabfragen und Caching enthalten. Direkt nach dem Erscheinen einer neuen Hauptversion zeigen viele Installationen jedoch instabile Verhaltensweisen. Sinnvoll bleibt daher ein Update ab der Version x.1.0, sobald größere Fehler behoben und die meisten Apps angepasst wurden. Dadurch profitieren Installationen von Leistungssteigerungen, ohne sich instabile Entwicklungen einzuhandeln.

Ergänzende Optimierung für Umgebungen mit hoher Talk-Nutzung

Instanzen, die Nextcloud Talk intensiv einsetzen, profitieren zusätzlich vom Einsatz eines Signaling-Servers. Dieses System arbeitet neben Janus und einem NATS-Dienst und entlastet die Hauptinstanz bei der Verwaltung der Medienströme. Administratoren installieren die Komponenten in einem separaten Dienstverzeichnis, bauen den Signaling-Server aus dem Quellcode, konfigurieren die Verbindungsparameter mit Nextcloud und binden ihn anschließend über die Talk-Einstellungen ein. Die Option für das gemeinsame Geheimnis verweist auf den zuvor generierten Schlüssel. Diese Erweiterung verbessert ausschließlich den Ablauf von Videokonferenzen und wirkt sich nicht auf Dateioperationen aus, eignet sich aber für Umgebungen mit vielen gleichzeitigen Teilnehmern.

Bildergalerie
Bildergalerie mit 6 Bildern

(ID:50677209)