Um eine Nextcloud-Warnung bezüglich des PHP-Speicherlimits zu beheben, setzen Sie den Wert in der PHP-Konfiguration des Webservers memory_limitauf 512Mmindestens 512 MB und starten Sie anschließend den entsprechenden PHP-Dienst neu. Das aktuelle stabile Nextcloud-Administrationshandbuch empfiehlt für diese PHP-Einstellung mindestens 512 MB. Der häufigste Grund, warum eine Warnung nach der Bearbeitung einer Konfigurationsdatei weiterhin besteht, ist, dass der Webserver eine andere PHP-Konfiguration verwendet als die PHP-Installation über die Kommandozeile.
Wählen Sie die Vorgehensweise, die zu Ihrer Bereitstellung passt: Apache mit mod_php, Apache oder Nginx mit PHP-FPM, ein Container oder ein verwaltetes Nextcloud-Paket. Ändern Sie nicht die zufällige Konfiguration des Hosts php.iniund gehen Sie nicht davon aus, dass jede Bereitstellung diese verwendet. Überprüfen Sie das Ergebnis auf der Nextcloud-Admin-Übersichtsseite, die die Konfiguration der Webanwendung widerspiegelt.
Was bedeutet diese Warnung?
Der PHP- memory_limitSpeicherbelegungsrahmen gibt die maximale Speichermenge an, die ein einzelnes PHP-Skript belegen darf. Er entspricht nicht dem gesamten für Nextcloud reservierten Arbeitsspeicher und erhöht auch nicht den dem Server zur Verfügung stehenden physischen Speicher. Laut Nextcloud-Handbuch sollten für diese Direktive mindestens 512 MB konfiguriert werden. Die Systemanforderungen weisen zudem darauf hin, dass der tatsächliche Speicherbedarf des Servers je nach Benutzern, Anwendungen, Dateien und Aktivitäten variiert. Sie empfehlen mindestens 512 MB RAM pro PHP-Prozess, mit einem Minimum von 128 MB.
Durch Anheben des PHP-Limits lässt sich eine Konfigurationswarnung beheben und speicherintensiven Anfragen mehr Spielraum verschaffen. Es kann jedoch weder den Arbeitsspeicher eines unterdimensionierten Hosts erweitern noch ein Speicherleck beheben oder garantieren, dass jede Anwendung erfolgreich abgeschlossen wird. Steht der Server bereits unter Speicherdruck, kann ein höheres Limit pro Anfrage das Risiko erhöhen, dass gleichzeitig laufende PHP-Prozesse den Arbeitsspeicher des Systems erschöpfen.
Welche PHP-Konfiguration sollten Sie bearbeiten?
Zunächst muss ermittelt werden, wie Nextcloud mit PHP ausgeführt wird. Eine Terminalabfrage, beispielsweise mit dem Befehl `npm run php --inidev`, zeigt die Konfiguration der Kommandozeile (CLI) an. Die Webanfragen von Nextcloud können ein separates Apache-Modul oder einen PHP-FPM-Dienst mit einer anderen Konfiguration php.inioder einem Pool-Override verwenden. Nextcloud weist ausdrücklich darauf hin, dass Web- und CLI-PHP unterschiedliche Konfigurationsdateien verwenden können.
Typische Speicherorte auf Debian-basierten Systemen sind beispielsweise /etc/php/8.x/apache2/php.inidas PHP-Modul von Apache und /etc/php/8.x/fpm/php.iniPHP-FPM. Die tatsächliche PHP-Version und die Verzeichnisnamen können variieren. Andere Distributionen verwenden häufig andere Pfade, etwa ein gemeinsames Verzeichnis /etc/php.ini. Diese Angaben dienen lediglich als Beispiele; verwenden Sie Ihren Paketmanager, Ihre Dienstkonfiguration und Ihre PHP-Laufzeitumgebung, um die aktive Datei zu finden.
Um die CLI-Konfiguration zu überprüfen, führen Sie Folgendes aus:
php --ini
php -i | grep -i '^memory_limit'
Diese Befehle sind nützlich für geplante Jobs, die PHP über die Kommandozeile aufrufen, beweisen aber nicht, dass der Browser-seitige Nextcloud-Prozess denselben Wert verwendet. Vermeiden Sie es, eine öffentliche phpinfo()Seite auf dem Server zu belassen: Dadurch können Pfade, Module und Laufzeitdetails offengelegt werden.
Wie legt man das Limit für Apache oder PHP-FPM fest?
Sichern Sie die aktive Konfigurationsdatei, bevor Sie sie ändern. php.iniSuchen Sie in der entsprechenden Datei die vorhandene memory_limitZeile und setzen Sie sie auf 512Meinen für Ihre Arbeitslast geeigneten höheren Wert.
memory_limit = 512M
Verwenden Sie eine einzige aktive Einstellung, anstatt am Ende mehrerer Dateien doppelte Zeilen hinzuzufügen. Ein PHP-FPM-Pool kann auch Werte für seine Worker definieren. Überprüfen Sie daher die Pool-Konfiguration, falls der Wert php.inikeine Wirkung zeigt. Einige PHP-Installationen unterstützen eine verzeichnisspezifische Einstellung .user.ini; ob diese aktiv ist, hängt von der Serverkonfiguration ab und sollte mit dem Administrator geklärt werden.
Apache mit mod_php
Bearbeiten Sie die php.inivon Apache verwendete Konfigurationsdatei, speichern Sie sie und starten Sie Apache neu, damit das Modul seine Einstellungen neu lädt. Dienstnamen können variieren. Unter Debian oder Ubuntu lautet der Dienstname üblicherweise apache2`apache`, unter RHEL-Systemen üblicherweise `apache` httpd. Verwenden Sie den Dienstnamen, der zu Ihrem Betriebssystem und Ihren Wartungsverfahren passt.
sudo systemctl restart apache2
Ersetzen Sie dies apache2, falls Ihre Distribution einen anderen Unit-Namen verwendet. Wenn Nextcloud über PHP-FPM anstatt über mod_php bereitgestellt wird, werden die PHP-Worker durch einen Neustart von Apache nicht neu geladen.
Apache oder Nginx mit PHP-FPM
Bearbeiten Sie die von der Website verwendete PHP-FPM-Konfiguration. Nach dem Speichern der Änderung starten Sie den entsprechenden PHP-FPM-Dienst neu oder laden Sie ihn neu. Die zugehörige Einheit kann beispielsweise die PHP-Version enthalten php8.3-fpmoder einen anderen herstellerspezifischen Namen verwenden.
sudo systemctl restart php8.3-fpm
Verwenden Sie den korrekten Dienstnamen für Ihre installierte PHP-Version. Nginx leitet PHP-Anfragen an FPM weiter. Daher muss eine Änderung der PHP-Einstellungen in der Regel auch in FPM vorgenommen werden; ein Neustart von Nginx allein setzt das Speicherlimit von PHP nicht zurück. Falls Ihre PHP-FPM-Poolkonfiguration die Einstellung überschreibt memory_limit, passen Sie die Pooleinstellung an oder entfernen Sie die Überschreibung und starten Sie den Pool anschließend neu.
Was passiert, wenn Nextcloud in Docker, AIO, Snap oder einem anderen Paket läuft?
Verwenden Sie den Konfigurationsmechanismus für diese Installationsmethode. Das Bearbeiten der PHP-Dateien des Hosts ändert in der Regel nicht die PHP-Laufzeitumgebung innerhalb eines Containers oder eines isolierten Pakets. Die offizielle Nextcloud-Docker-Image-Dokumentation beschreibt die PHP_MEMORY_LIMITUmgebungsvariable mit einem Standardwert, der 512Min der aktuellen Image-Dokumentation angegeben ist. Setzen Sie diese Variable in der Compose-Datei oder der Containerkonfiguration und erstellen oder starten Sie anschließend den Anwendungscontainer gemäß der Bereitstellungsprozedur neu.
environment:
PHP_MEMORY_LIMIT: 512M
Kopieren Sie diese Einstellung nicht in jede Installationsart. Laut Nextcloud-Handbuch verfügen schlüsselfertige Umgebungen wie AIO, Snap, NCP und Community Docker über vorkonfiguriertes PHP und verweisen Administratoren auf die paketspezifischen Anweisungen zur Anpassung. Verwenden Sie für diese Setups die unterstützte Schnittstelle oder Dokumentation des jeweiligen Pakets. Permanente Volume-Mounts und generierte Konfigurationen können zudem eine einmalige manuelle Bearbeitung überschreiben.
Wie können Sie bestätigen, dass die Warnung behoben ist?
- Wenden Sie die Änderung auf die webseitige PHP-Konfiguration an und starten Sie den entsprechenden Web-/PHP-Dienst neu oder laden Sie ihn neu.
- Melden Sie sich als Administrator bei Nextcloud an und öffnen Sie Einstellungen > Administration > Übersicht .
- Aktualisieren Sie die Seite und überprüfen Sie die Konfigurationswarnungen. Vergewissern Sie sich, dass die PHP-Speicherbeschränkungswarnung nicht mehr angezeigt wird.
- Führen Sie eine repräsentative Operation aus, die zuvor die Warnung ausgelöst hat, z. B. die Aufgabe der betroffenen App, und überprüfen Sie die Nextcloud- und PHP-Protokolle auf Meldungen über Speichermangel.
Wenn Sie Nextcloud-Hintergrundprozesse auch über System-Cron ausführen, überprüfen Sie die PHP-Konfiguration der Kommandozeile separat. Die Warnung in der Webanwendung kann behoben werden, während die Kommandozeilenprozesse weiterhin ein niedrigeres Limit verwenden. Bestätigen Sie den Wert der Kommandozeile für php --inidieselbe php -iPHP-Binärdatei, die auch vom Cron-Befehl verwendet wird.
Wann sollte der Wert über 512 Mio. angehoben werden?
Erhöhen Sie das Limit nur, wenn die Warnung nicht mehr angezeigt wird, die dokumentierte Arbeitslast aber weiterhin das PHP-Limit erreicht oder die Anwendungsrichtlinien einen höheren Speicherbedarf vorschreiben. Überprüfen Sie zunächst den tatsächlichen Serverspeicher, die Anzahl der PHP-FPM-Worker, den Datenbankspeicher und andere Dienste. Da PHP das Limit pro Skript anwendet, können mehrere stark ausgelastete Worker gleichzeitig erheblichen Speicher belegen. Setzen Sie stattdessen ein angemessenes Limit, das zum Speicherbudget des Hosts passt, anstatt das -1PHP-Limit zu verwenden, das laut Dokumentation kein Speicherlimit hat.
Wenn die Warnung verschwunden ist, der Server aber weiterhin langsam ist oder Prozesse beendet werden, überprüfen Sie den Systemspeicher, die Auslagerungsspeichernutzung, die PHP-FPM-Protokolle und die Nextcloud-Protokolle. Prüfen Sie, ob eine bestimmte Anwendung oder Anfrage übermäßig viel Speicher verbraucht. Ein Speichercache wie APCu oder Redis kann Probleme mit dem Caching und der Performance beheben; er ersetzt jedoch nicht die PHP-Einstellungen memory_limit. Ändern Sie jeweils nur einen Faktor, um festzustellen, ob sich das Ergebnis verbessert hat.
Schnellchecks anhand der Symptome
- Die Warnung bleibt auch nach der Bearbeitung der php.ini bestehen: Überprüfen Sie, ob Sie die CLI-Datei anstelle der Apache/FPM-Datei bearbeitet haben oder ob eine Pool-Einstellung diese überschreibt.
- Die Warnung verschwindet, aber ein Cron-Job schlägt immer noch fehl: Überprüfen Sie die CLI-PHP-Binärdatei und ihre separate Konfiguration.
- Der Webserver gibt nach dem Neustart einen Fehler zurück: Überprüfen Sie den Status und die Protokolle des Webservers bzw. des PHP-FPM-Dienstes und stellen Sie die Sicherung wieder her, falls die Konfigurationsänderung einen Startfehler verursacht hat.
- Die Warnung verschwindet, aber dem Host geht der Arbeitsspeicher aus: Reduzieren Sie die Parallelität, fügen Sie Speicher hinzu oder identifizieren Sie den Prozess, der den Speicher belegt, bevor Sie das PHP-Limit weiter erhöhen.
- Sie verwenden einen Container oder ein Komplettpaket: Ändern Sie die unterstützten PHP-Einstellungen des Pakets anstatt die php.ini des Hosts.
Offizielle Referenzen