Startseite
» NETZWERK-ADMIN
»
Behebung des Fehlers „PHP-Speicherlimit unterhalb des empfohlenen Werts“ in ownCloud 10
Behebung des Fehlers „PHP-Speicherlimit unterhalb des empfohlenen Werts“ in ownCloud 10
Das gewünschte Ergebnis ist nicht einfach nur „die Warnung ist verschwunden“. Eine korrekte Lösung bedeutet, dass der PHP-Prozess, der ownCloud 10 tatsächlich ausführt, ein Speicherlimit von mindestens 512 MB meldet, die ownCloud-Admin-Warnung verschwindet, geplante oder CLI-Jobs ebenfalls ein angemessenes Limit verwenden und der Host immer noch über genügend physischen Speicher verfügt, um PHP, den Webserver, die Datenbank und Hintergrundprozesse ohne intensives Auslagern auszuführen.
Für ownCloud Classic 10.16 verwendet die offizielle Docker-Umgebung OWNCLOUD_MEMORY_LIMIT=512Mstandardmäßig die empfohlene PHP-Konfiguration. Die ownCloud-Dokumentation unterscheidet außerdem zwischen der vom Webserver verwendeten PHP-Konfiguration und der von der verwendeten Konfiguration php-cli. Diese Unterscheidung ist der Hauptgrund dafür, dass Administratoren manchmal die Konfiguration ändern memory_limit, einen Dienst neu starten und trotzdem dieselbe Warnung erhalten.
Diese Anleitung beginnt mit den schonendsten Prüfungen und zeigt anschließend die Pfade für Apache, PHP-FPM, die Kommandozeile und Docker. Außerdem wird erläutert, wann eine weitere Erhöhung des Limits gerechtfertigt ist und wann das eigentliche Problem nicht in den PHP-Einstellungen, sondern im unzureichenden Arbeitsspeicher des Hosts liegt.
Wie Erfolg aussieht
Überprüfen
Gutes Ergebnis
Wenn es fehlschlägt
ownCloud-Administratorübersicht
Keine Warnung „PHP-Speicherlimit unterhalb des empfohlenen Werts“
Sie haben wahrscheinlich die falsche PHP-Konfiguration bearbeitet oder nicht den richtigen Dienst neu gestartet.
Web PHP-Laufzeitumgebung
memory_limitzeigt 512M oder höher an
Ermitteln Sie die geladene Konfigurationsdatei, die von der Webanfrage verwendet wird.
CLI / Cron-Laufzeitumgebung
php -r 'echo ini_get("memory_limit");'zeigt den beabsichtigten Wert an
php.iniBearbeiten Sie auch die CLI-spezifischen Einstellungen .
Hostspeicher
Ausreichend verfügbarer Arbeitsspeicher; geringer oder kein anhaltender Auslagerungsdruck
Erhöhen Sie die PHP-Limits nicht blindlings. Überprüfen Sie die Anzahl der PHP-Worker oder die Dimensionierung des Hosts.
Protokolle
Es treten keine wiederkehrenden Fehler der Art „Zulässiger Speicherplatz erschöpft“ auf.
Ermitteln Sie die Arbeitslast, die den Speicher belegt, bevor Sie das Limit erneut erhöhen.
1. Bestätigen Sie die Warnung und den von ownCloud angezeigten Wert.
Beginnen Sie mit dem Wert, der für ownCloud selbst sichtbar ist. Ein Web-Runtime-Limit von 128 MB oder 256 MB liegt unter dem Wert von 512 MB, der in der empfohlenen Docker-Konfiguration von ownCloud verwendet wird.
Öffnen Sie die ownCloud-Administrationseinstellungen und beachten Sie die Warnung zum Speicherlimit. Notieren Sie sich vor jeder Änderung die ownCloud-Version, die PHP-Version, den Webservertyp und das aktuelle Speicherlimit. Dies dient als Grundlage und verhindert Änderungen an der falschen PHP-Installation auf Systemen mit mehreren PHP-Versionen.
Die aktuelle ownCloud-Dokumentation (Version 10.16) besagt, dass die Serveranforderungen stark von der Anzahl der Benutzer, Dateien und der Aktivität abhängen. Die Docker-Konfiguration legt OWNCLOUD_MEMORY_LIMIT=512Mdiese Standardeinstellung fest und empfiehlt, sie beizubehalten. Daher sind 512 MB ein sinnvoller Richtwert, um die Warnung zu beheben, jedoch keine Garantie dafür, dass jede Arbeitslast in 512 MB passt.
2. Vertrauen Sie nicht darauf, dass der CLI-Wert den Webserver repräsentiert.
php --inimeldet die Konfiguration für die PHP-Befehlszeile. Diese kann von der PHP-Konfiguration abweichen, die von Apache oder PHP-FPM zum Bereitstellen von ownCloud verwendet wird.
Führen Sie diese Befehle aus, um zu sehen, was der PHP-Befehlszeilenprozess verwendet:
Dies ist zwar nützlich für occCronjobs, beweist aber nicht, was die Webanfrage verwendet. ownCloud dokumentiert explizit separate Konfigurationspfade wie beispielsweise:
Wenn Ihre CLI 512M anzeigt, die Admin-Seite aber immer noch eine Fehlermeldung ausgibt, ist diese Diskrepanz ein starkes Indiz dafür, dass der Webserver eine andere Datei lädt php.ini.
Beachten Sie die Hinweise zur PHP-Konfiguration von ownCloud , in denen ausdrücklich darauf hingewiesen wird, dass die PHP-Einstellungen möglicherweise in mehr als einer INI-Datei geändert werden müssen.
3. Ermitteln Sie die PHP-Konfiguration, die von der Webanfrage verwendet wird.
Vergleichen Sie die PHP-Laufzeitumgebung des Browsers mit der Laufzeitumgebung der Befehlszeile. Die im Browser geladene Konfigurationsdatei ist diejenige, die für die ownCloud-Webwarnung relevant ist.
Der zuverlässigste Test besteht darin, PHP-Code aus demselben Web-Stack zu untersuchen, der ownCloud bereitstellt. Die ownCloud-Dokumentation beschreibt die Verwendung einer temporären phpinfo.phpSeite:
<?php phpinfo(); ?>
Legen Sie es vorübergehend in das Web-Root-Verzeichnis, öffnen Sie es in einem Browser und suchen Sie Folgendes:
Geladene Konfigurationsdatei
Speicherlimit
Server-API
Löschen Sie anschließend umgehend die phpinfo-Datei . ownCloud warnt davor, dass eine öffentliche phpinfo-Seite sensible Serverinformationen preisgibt.
Wenn der Browser eine Warnung ausgibt , /etc/php/7.4/fpm/php.iniwährend php --inieine andere Meldung erscheint /etc/php/7.4/cli/php.ini, wissen Sie jetzt genau, warum das Bearbeiten der CLI-Datei die Warnung nicht beseitigt hat.
4. PHP-FPM: Erhöhung des Web-Runtime-Limits auf 512 MB
Bei einer Nginx- oder Apache-Konfiguration mit PHP-FPM muss nicht nur die CLI-Datei, sondern auch die FPM- php.inioder die entsprechende Pool-/Site-Überschreibung geändert werden.
Bei einer typischen Debian- oder Ubuntu-Installation:
sudo nano /etc/php/7.4/fpm/php.ini
Finden:
memory_limit = 128M
und ändern Sie es in:
memory_limit = 512M
Verwenden Sie Ihre installierte PHP-Version im Pfad. Starten Sie anschließend gegebenenfalls den entsprechenden FPM-Dienst und Ihren Webserver neu.
Bei Apache mit proxy_fcgioder einer anderen FPM-Konfiguration starten Sie PHP-FPM neu und laden Sie stattdessen Apache neu.
ownCloud weist außerdem darauf hin, dass PHP-FPM keine PHP-Einstellungen aus der Konfigurationsdatei übernimmt .htaccess. Wenn Sie mit FPM auf verzeichnisspezifische Überschreibungen angewiesen sind, verwenden Sie den für Ihre Umgebung unterstützten PHP/FPM-Konfigurationsmechanismus, z. B. die entsprechende php.iniKonfigurationsdatei, die Pool-Konfiguration oder die entsprechende Konfigurationsdatei .user.ini.
5. Apache mit mod_php: Bearbeiten Sie die Apache PHP-Konfiguration
Mit Apache mod_php bearbeiten Sie die Apache-spezifische PHP-Konfiguration und starten Apache neu, damit neue Worker-Prozesse das neue Limit laden.
Wenn Apache PHP direkt als Modul lädt, bearbeiten Sie die Apache-spezifische Datei:
sudo nano /etc/php/7.4/apache2/php.ini
Satz:
memory_limit = 512M
Starten Sie anschließend Apache neu:
sudo systemctl restart apache2
Kopieren Sie die Versionsnummer nicht automatisch. Überprüfen Sie die von Apache tatsächlich geladene Version. Systeme, die über mehrere PHP-Versionen hinweg aktualisiert wurden, behalten oft mehrere Verzeichnisse unter /etc/php/.
Das Ergebniskriterium ist einfach: Nach dem Neustart muss die webseitige PHP-Laufzeitumgebung den neuen Wert anzeigen. Wird weiterhin 128M angezeigt, überschreibt eine andere Konfigurationsebene Ihre Änderung.
6. Aktualisieren Sie das CLI-Limit, wenn occ oder cron zu wenig Speicher verwendet.
Die Warnung im Admin-Bereich wird von der Web-Laufzeitumgebung ausgelöst, occCronjobs hingegen verwenden die PHP-Befehlszeilenschnittstelle (CLI). Die ownCloud-Dokumentation weist explizit darauf hin.
Bearbeiten:
sudo nano /etc/php/7.4/cli/php.ini
Satz:
memory_limit = 512M
Anschließend überprüfen:
php -r 'echo ini_get("memory_limit"), PHP_EOL;'
Für CLI-PHP ist kein Neustart des Dienstes erforderlich, da jeder CLI-Aufruf einen neuen Prozess startet. Wenn Ihr Cronjob jedoch explizit eine andere PHP-Binärdatei aufruft, überprüfen Sie diese Binärdatei genau, anstatt anzunehmen, dass /usr/bin/phpdie verwendete bereits vorhanden ist.
ownCloud empfiehlt die Ausführung occals HTTP-Benutzer, typischerweise www-dataunter Debian/Ubuntu. Die offizielle occ-Dokumentation weist außerdem darauf hin, dass occbei der Installation mehrerer PHP-Versionen dieselbe Version wie für den Webserver verwendet werden sollte.
7. Docker: Verwenden Sie OWNCLOUD_MEMORY_LIMIT, anstatt Dateien innerhalb des Containers zu bearbeiten.
Für den offiziellen ownCloud-Container müssen Sie OWNCLOUD_MEMORY_LIMIT=512Mdie Containerumgebung einrichten und den Dienst neu erstellen, damit die generierte PHP-Konfiguration aktualisiert wird.
Für das offizielle ownCloud-Docker-Image verwenden Sie die dokumentierte Umgebungsvariable:
environment:
OWNCLOUD_MEMORY_LIMIT: 512M
Erstellen Sie anschließend den Dienst neu:
docker compose up -d
Nehmen Sie die primäre Fehlerbehebung nicht durch Bearbeiten php.iniinnerhalb eines temporären Containers vor. Beim Neuerstellen des Containers können diese Änderungen verloren gehen. Die offizielle ownCloud-Docker-Umgebungsdokumentation definiert OWNCLOUD_MEMORY_LIMIT=512Mund empfiehlt, diese Standardeinstellung beizubehalten.
Wenn der Docker-Host selbst über ein enges Speicherlimit verfügt, sollten auch die Containerbeschränkungen überprüft werden:
docker stats
Ein PHP-Limit von 512 MB sorgt nicht automatisch dafür, dass dem Container 512 MB freier Speicher zur Verfügung stehen; es erlaubt lediglich, dass eine einzelne PHP-Anfrage maximal diese Menge an Speicher belegt. Container und Host benötigen weiterhin ausreichend Speicher für alle gleichzeitig laufenden PHP-Prozesse und andere Dienste.
8. Starten Sie den entsprechenden Dienst neu und überprüfen Sie dies von derselben Laufzeitumgebung aus.
Die Fehlerbehebung ist erst dann abgeschlossen, wenn die Web-Runtime 512 MB oder mehr meldet und ownCloud die Warnung wegen geringen Speichers nicht mehr anzeigt.
Nach dem Neustart des betreffenden Dienstes überprüfen Sie bitte erneut die temporäre phpinfo-Seite oder die ownCloud-Admin-Übersicht. Entfernen Sie anschließend die phpinfo-Seite.
Falls Sie PHP-FPM geändert haben, überprüfen Sie Folgendes:
sudo systemctl status php7.4-fpm
sudo systemctl status nginx
Wenn Sie Apache geändert haben:
sudo systemctl status apache2
Aktualisieren Sie die ownCloud-Adminseite. Die Warnung sollte verschwunden sein, wenn ownCloud nun mindestens mit dem erwarteten Limit ausgeführt wird.
9. Überprüfen Sie den Arbeitsspeicher des Hosts, bevor Sie das PHP-Limit über 512 MB hinaus erhöhen.
Nach Anhebung des Limits pro Anfrage sollten Sie den gesamten Systemspeicher und das Verhalten der PHP-Worker überprüfen. Ein höheres PHP-Limit kann den RAM-Verbrauch im schlimmsten Fall erhöhen, wenn viele Worker aktiv sind.
Laufen:
free -h
ps aux | grep php-fpm
vmstat 1
Die PHP- memory_limitSpeicherbegrenzung ist pro Skript. Sie stellt keine Reservierung dar und entspricht nicht dem benötigten Arbeitsspeicher des Servers. Wenn Sie 20 PHP-Prozesse haben und jedem Prozess die Berechtigung erteilen, sehr viel Speicher zu verwenden, kann der theoretische Worst-Case den Arbeitsspeicher des Rechners deutlich überschreiten.
Die Optimierungsdokumentation von ownCloud gibt denselben allgemeinen Hinweis für Webserverprozesse: Die Anzahl der Prozesse sollte so dimensioniert werden, dass die gesamte Speichernutzung unter dem verfügbaren RAM bleibt. Andernfalls beginnt das System mit dem Auslagern von Daten, und die Leistung sinkt. Siehe die Optimierungshinweise für ownCloud Classic .
Wenn die 512M-Warnung nicht mehr auftritt und der normale Geschäftsbetrieb reibungslos verläuft, gibt es keinen Grund, das Limit nur um der Anzahl willen zu erhöhen.
10. Wenn 512 MB immer noch die Meldung „Zulässiger Speicher erschöpft“ ausgeben
Eine Warnung wegen gelöschter Empfehlungen und ein Absturz aufgrund von Speichermangel sind unterschiedliche Probleme. Wenn die Protokolle Meldungen wie die folgenden enthalten:
PHP Fatal error: Allowed memory size of ... bytes exhausted
Ermitteln Sie den Vorgang, der dies auslöst. Große Scans, Verschlüsselungsaufträge, Operationen auf externen Speichern, Bildverarbeitung oder Apps von Drittanbietern können sehr unterschiedliche Speicherprofile aufweisen.
Überprüfen Sie das ownCloud-Protokoll und das PHP-/Webserver-Fehlerprotokoll. Eine Standardinstallation von ownCloud speichert ihr eigenes Protokoll im konfigurierten Datenverzeichnis, üblicherweise `/usr/local data/owncloud.log...
Wenn ein bekannter administrativer Prozess berechtigterweise mehr Speicher benötigt, kann eine gezielte Überschreibung über die Befehlszeile sicherer sein als die globale Begrenzung aller Webanfragen:
php -d memory_limit=1G occ <command>
Verwenden Sie dies nur, wenn Sie das Befehls- und Speicherverhalten verstehen. Es behebt keine Webanfragen, die über PHP-FPM oder Apache ausgeführt werden.
Warum die Warnung nach der Bearbeitung der php.ini-Datei weiterhin angezeigt werden kann
Symptom
Wahrscheinliche Ursache
Nächster Check
php -rzeigt 512 Millionen an, ownCloud zeigt weiterhin 128 Millionen an.
Du hast nur CLI PHP geändert
Überprüfen Sie die phpinfo-Datei Ihres Browsers und die zugehörige geladene Konfigurationsdatei.
Die FPM-Datei gibt 512 MB an, der Browser zeigt aber weiterhin 128 MB an.
Pool .user.inioder eine andere INI-Datei überschreibt dies.
Überprüfen Sie die phpinfo-Werte „local“ und „master“ sowie weitere analysierte INI-Dateien.
Wertänderungen erfolgen erst nach einem Neustart
Der richtige Dienst wurde nicht neu gestartet.
Starten Sie PHP-FPM oder Apache nach der Bearbeitung explizit neu.
Der Docker-Wert wird nach dem Neuerstellen auf die alte Einstellung zurückgesetzt.
Sie haben innerhalb des Containers bearbeitet.
OWNCLOUD_MEMORY_LIMITIn Compose oder der Bereitstellungsumgebung festlegen .
Die Warnung verschwindet, aber der Server beginnt mit dem Austausch.
Die PHP-Parallelität übersteigt den Arbeitsspeicher des Hosts.
Reduzieren Sie die Anzahl der Mitarbeiter, optimieren Sie die Arbeitslast oder fügen Sie RAM hinzu.
Verwechseln Sie nicht memory_limit mit upload limits
memory_limitupload_max_filesizeund post_max_sizelösen unterschiedliche Probleme. Eine Erhöhung des PHP-Speichers ermöglicht Nutzern nicht automatisch das Hochladen größerer Dateien. In den Konfigurationshinweisen zu ownCloud 10.16 wird separat darauf hingewiesen, dass der Speicher für die dokumentierte Mindesteinstellung auf mindestens 512 MB konfiguriert werden sollte , post_max_sizeund es wird erklärt, dass Upload-Limits separate Einstellungen erfordern.
Wenn das eigentliche Symptom „große Uploads schlagen fehl“ lautet, überprüfen Sie upload_max_filesizedie post_max_sizeEinstellungen für Proxy/Webserver (z. B. maximale Paketgröße, Timeouts und temporären Speicherplatz). Verwenden Sie keine höhere Einstellung memory_limitals Ersatz für diese Kontrollmechanismen.
Abschließende Checkliste
Bestätigen Sie die Warnung und den aktuellen Wert in ownCloud.
Ermitteln Sie, ob ownCloud Apache mod_php oder PHP-FPM verwendet.
Suchen Sie die geladene Konfigurationsdatei der Web- Laufzeitumgebung.
Setzen Sie das Web-PHP memory_limitauf mindestens 512M.
Aktualisieren Sie auch CLI PHP, falls occcron ein niedrigeres Limit verwendet.
Für Docker OWNCLOUD_MEMORY_LIMIT=512Min der Bereitstellungsumgebung festlegen.
Starten Sie den Dienst, der PHP tatsächlich ausführt, neu oder erstellen Sie ihn neu.
Überprüfen Sie den Wert in der Web-Laufzeitumgebung, nicht nur in der Befehlszeile.
Prüfen Sie, ob die ownCloud-Warnung nicht mehr angezeigt wird.
Überwachen Sie den Arbeitsspeicher (RAM) und die Auslagerungsdatei des Hosts, bevor Sie das Limit über 512 MB hinaus erhöhen.
Fazit
Die saubere Lösung für die Fehlermeldung „PHP-Speicherlimit unterhalb des empfohlenen Werts“ in ownCloud 10 besteht darin, die PHP-Laufzeitumgebung, die ownCloud tatsächlich ausführt, auf ein Speicherlimit von mindestens 512 MB einzustellen und das Ergebnis anschließend mit derselben Laufzeitumgebung zu überprüfen. Der häufigste Fehler tritt auf, /etc/php/.../cli/php.iniwenn ownCloud mit einer anderen Konfigurationsdatei über PHP-FPM oder Apache ausgeführt wird.
Beenden Sie den Vorgang, sobald die Warnung nicht mehr angezeigt wird, der reguläre Betrieb reibungslos läuft und der Host über ausreichend freien Arbeitsspeicher verfügt. Falls PHP während einer bestimmten Operation weiterhin 512 MB belegt, wechseln Sie von der Erhöhung des Limits zur Lastanalyse: Untersuchen Sie den fehlerhaften Befehl, Anwendungen, Protokolle, Parallelverarbeitung und den physischen Arbeitsspeicher. Ein höheres Limit kann angebracht sein, jedoch nur, wenn die Arbeitslast dies rechtfertigt und der Server es problemlos unterstützt.