Ubuntu 16.04 Server: das PHP-Speicherlimit erhöhen

Um das Speicherlimit von PHP, das als Apache-Modul unter Ubuntu 16.04 läuft, zu erhöhen, ändern Sie den memory_limit-Wert in der entsprechenden PHP-php.ini-Datei, starten Sie dann Apache neu und überprüfen Sie den angewendeten Wert in einer Webanfrage. Da PHP-FPM oder CLI-PHP unterschiedliche Konfigurationsdateien verwenden können, müssen Sie zuerst die Ausführungsmethode überprüfen.

Anwendungsbereich und Überprüfung vor der Änderung

Dieser Artikel ist ein Beispiel für die Überprüfung eines vorhandenen Servers, der auf PHP 7.0 und dem Apache-Modul unter Ubuntu 16.04 basiert. Der allgemeine Sicherheits-Support für Ubuntu 16.04 ist beendet, und nach der erweiterten Sicherheitswartung kann separater Legacy-Support gelten. Überprüfen Sie den Anwendungsbereich im Ubuntu-Sicherheitswartungsplan und planen Sie die Migration zu einer unterstützten Umgebung.

memory_limit ist eine Einstellung, die den Speicher begrenzt, den ein PHP-Skript zuweisen kann. Sie ist nicht der maximale Speicher des physisch auf dem Server installierten Speichers oder der gesamte Speicher, der von mehreren Anfragen gemeinsam genutzt wird. Eine Erhöhung des Limits kann die Speicherbelastung des Servers abhängig von der Anzahl gleichzeitiger Anfragen erhöhen, daher sollten sowohl der verfügbare Speicher als auch die tatsächlichen Fehler überprüft werden. Der Standardwert kann je nach PHP-Einstellungen und der Anwendung variieren.

PHP-Einstellungen auf der Webseite finden

Bei der Standardinstallation des PHP 7.0 Apache-Moduls auf Ubuntu 16.04 wird /etc/php/7.0/apache2/php.ini verwendet. Der Pfad kann jedoch je nach PHP-Version, Installationsmethode und separaten Konfigurationen variieren. PHP-FPM verwendet normalerweise eine separate fpm/php.ini, und man sollte nicht davon ausgehen, dass das php --ini-Ergebnis aus der Befehlszeile den Einstellungen für eine Webanfrage entspricht.

In einer eingeschränkten Testumgebung erstellen Sie eine temporäre PHP-Datei im Web-Dokumentenverzeichnis und fügen den untenstehenden Code ein. Öffnen Sie die Datei in einem Browser, um die Ausführungsmethode, den Konfigurationsdateipfad und das aktuelle Limit zu überprüfen. Platzieren Sie sie nicht in einer öffentlichen Umgebung, da Serverinformationen wie Dateipfade offengelegt werden, und löschen Sie sie sofort nach der Überprüfung.

<?php
header('Content-Type: text/plain; charset=UTF-8');
echo 'SAPI: ' . PHP_SAPI . "\n";
echo 'Loaded ini: ' . php_ini_loaded_file() . "\n";
echo 'memory_limit: ' . ini_get('memory_limit') . "\n";

Wenn es apache2handler ist, wird die Apache-Modul-Methode verwendet, und wenn es fpm-fcgi ist, wird die PHP-FPM-Methode verwendet. Falls die Konfigurationsdatei nicht erscheint oder anders ist, als Sie erwarten, überprüfen Sie die Installation und die Verbindung zum Webserver. PHP kann neben der Standarddatei auch zusätzliche .ini-Dateien lesen und Werte können durch Anwendungs- oder Servereinstellungen überschrieben werden. Weitere Details finden Sie in der PHP-Konfigurationsdatei-Dokumentation.

Ändern von memory_limit

Das Folgende ist ein Beispiel, wenn der auf der Website überprüfte Pfad /etc/php/7.0/apache2/php.ini ist. Wenn es ein anderer Pfad ist, wenden Sie es auf die Datei an, die Sie tatsächlich überprüft haben. Stellen Sie vor dem Bearbeiten sicher, dass noch keine Sicherungsdatei vorhanden ist, und falls doch, ändern Sie im folgenden Befehl den Sicherungsnamen in einen neuen Namen.

sudo cp -a -n /etc/php/7.0/apache2/php.ini /etc/php/7.0/apache2/php.ini.before-memory-limit
sudo nano /etc/php/7.0/apache2/php.ini

Finden Sie die vorhandenen memory_limit-Einstellungen im Editor, ändern Sie sie auf die erforderlichen Werte und speichern Sie. Zum Beispiel, wenn der vorhandene Wert 128M ist und Sie feststellen, dass für die Aufgabe mehr benötigt wird, können Sie 256M versuchen. Die folgenden Werte sind Beispiele und keine empfohlenen Werte, die für alle Server geeignet sind.

memory_limit = 256M

Der Wert -1 hebt das Limit auf; verwenden Sie ihn nicht wahllos, um Probleme zu lösen. Die Ursache für einen Speicherengpass kann große Eingaben, ineffizienter Code oder gleichzeitige Anfragen sein. Die Bedeutung der Werte finden Sie in PHP memory_limit Beschreibung.

Auf Apache anwenden und überprüfen

Bei der Apache-Modulmethode führen Sie zunächst eine Konfigurationsprüfung durch. Syntax OK sollte erscheinen, um zum nächsten Schritt fortzufahren. Wenn die Prüfung fehlschlägt, beheben Sie die Fehler und prüfen Sie erneut. Diese Prüfung überprüft die Apache-Konfiguration und garantiert nicht, dass PHP-Grenzen bei Webanfragen korrekt angewendet werden.

sudo apache2ctl configtest

Wenn die Prüfung erfolgreich ist, starten Sie Apache zu einem geeigneten Zeitpunkt neu. Ein Neustart kann Verbindungen und laufende Anfragen beeinträchtigen, daher sollten Sie die Auswirkungen in der Produktionsumgebung prüfen.

sudo systemctl restart apache2
sudo systemctl status apache2

Überprüfen Sie, ob der Dienst normal funktioniert, und fordern Sie die zuvor erstellte PHP-Prüfdatei mit eingeschränktem Zugriff an, um zu sehen, ob memory_limit den beabsichtigten Wert anzeigt. Löschen Sie nach der Prüfung die temporäre Datei. Stellen Sie außerdem sicher, dass Fehler in der tatsächlichen Anwendung nicht erneut auftreten.

Im Fall von PHP-FPM kann das einfache Aktualisieren der oben genannten Apache-Moduldateien und ein Neustart möglicherweise die FPM-Einstellungen nicht anwenden. Überprüfen Sie die tatsächlich geladene FPM-Konfigurationsdatei und den verwendeten Dienstnamen und folgen Sie dem Verfahren zur Überprüfung der Konfiguration und zum Neustart für diesen Dienst.

Wenn es nicht angewendet wird oder Probleme auftreten

Wenn der auf der Website überprüfte Wert abweicht, überprüfen Sie, ob der bearbeitete Pfad, die PHP-Version und die Ausführungsmethode korrekt sind. Der Wert kann auch in zusätzlichen .ini-Dateien, Apache-Einstellungen, FPM-Pool-Einstellungen und der ini_set() der Anwendung unterschiedlich sein. Wenn auch nach Änderungen Speicherfehler auftreten, müssen Sie sich das Fehlerprotokoll, die Arbeitsdetails und die Serverspeichernutzung zusammen ansehen.

Wenn Sie die Änderungen rückgängig machen müssen, überprüfen Sie den Inhalt der gesicherten Konfigurationsdateien und stellen Sie sie in die Originaldateien wieder her, führen Sie dann erneut eine Apache-Konfigurationsprüfung und einen Neustart des Dienstes durch. Wenn der Sicherungspfad vom Beispiel abweicht, verwenden Sie den tatsächlichen Sicherungspfad. Sie können auch vor der Wiederherstellung die aktuelle Konfiguration separat aufbewahren, um die Änderungen zu vergleichen.