Heim  >  Artikel  >  Backend-Entwicklung  >  Optimierung der php.ini-Konfiguration

Optimierung der php.ini-Konfiguration

不言
不言Original
2018-04-26 11:21:131636Durchsuche

Der Inhalt dieses Artikels befasst sich mit der Optimierung der php.ini-Konfiguration, die einen bestimmten Referenzwert hat. Jetzt können Freunde in Not darauf verweisen.

Das standardmäßig installierte PHP ist wie der Durchschnitt Der Anzug, den Sie in einem Kaufhaus kaufen, passt Ihnen vielleicht gut, ist aber nicht perfekt. Tuned PHP ist wie ein maßgeschneiderter Anzug, der genau Ihren Maßen entspricht. Es sollte jedoch beachtet werden, dass die Optimierung von PHP nur eine Maßnahme zur Verbesserung der Leistung und Effizienz von PHP ist und keinen schlechten Code und nicht reagierende API-Aufrufe beheben kann.

php.ini-Datei

Der PHP-Interpreter wird in der php.ini-Datei konfiguriert und optimiert. Der Speicherort dieser Datei ist in verschiedenen Betriebssystemen unterschiedlich und im Allgemeinen entspricht die Befehlszeile php.ini und die entsprechenden php.ini-Dateien für PHP-FPM sind getrennt. Hier gehen wir davon aus, dass die php.ini entsprechend PHP-FPM konfiguriert ist, die unten beschriebenen Optimierungsmaßnahmen gelten jedoch für alle php.ini.

Hinweis: Wir sollten zuerst das PHP-Iniscan-Tool verwenden, um php.ini zu scannen, um zu überprüfen, ob bewährte Sicherheitspraktiken angewendet werden.

Speicher

Beim Ausführen von PHP müssen Sie darauf achten, wie viel Speicher jeder PHP-Prozess verwendet. Die php.ini-Einstellung in memory_limit wird verwendet, um das System festzulegen, das a Maximale Speichergröße, die ein einzelner PHP-Prozess nutzen kann.

Der Standardwert dieser Einstellung ist 128M, was für die meisten kleinen und mittleren PHP-Anwendungen geeignet sein kann. Wenn Sie jedoch eine Mikro-PHP-Anwendung ausführen, können Sie diesen Wert senken, um zu sparen Systemressourcen und umgekehrt können Sie diesen Wert erhöhen, wenn Sie eine speicherintensive PHP-Anwendung ausführen. Die Größe dieses Werts wird durch den verfügbaren Systemspeicher bestimmt. Es ist eine Kunst, zu bestimmen, wie viel Speicher PHP zugewiesen werden soll und wie viele PHP-FPM-Prozesse es leisten kann auf den folgenden Dimensionsinformationen:


  • Wie viel Speicher kann PHP insgesamt zugewiesen werden? Nehmen Sie als Beispiel einen VPS mit 2G-Speicher. Auf diesem Gerät können auch andere Prozesse wie MySQL, Nginx usw. ausgeführt werden. Daher ist es angebracht, 512 MB für PHP zu belassen.

  • Wie viel Speicher verbraucht jeder PHP-Prozess im Durchschnitt? Um die Speichernutzung des Prozesses zu überwachen, können Sie den Befehl top der Befehlszeile verwenden oder die Funktion memory_get_peak_usage() in einem PHP-Skript aufrufen. Unabhängig davon, welche Methode verwendet wird, muss dasselbe Skript mehrmals ausgeführt werden Es wird der durchschnittliche Speicherverbrauch genommen.

  • Wie viele PHP-FPM-Prozesse können Sie sich leisten? Angenommen, ich ordne PHP 512 MB Speicher zu und jeder PHP-Prozess verbraucht durchschnittlich 15 MB Speicher, dann kann ich mir 34 PHP-FPM-Prozesse leisten.

  • Sind genügend Systemressourcen vorhanden? Abschließend müssen Sie bestätigen, dass genügend Systemressourcen vorhanden sind, um die PHP-Anwendung auszuführen und den erwarteten Datenverkehr zu verarbeiten.

Hinweis: Wir sollten Apache Bench oder Siege verwenden, um die PHP-Anwendung unter ähnlichen Bedingungen wie die Produktionsumgebung einem Stresstest zu unterziehen und festzustellen, ob die Produktionsumgebung über ausreichende Ressourcen verfügt. Verfügbar.

Zend OPcache

Nachdem Sie ermittelt haben, wie viel Speicher Sie zuweisen möchten, können Sie die Zend OPcache-Erweiterung von PHP konfigurieren. Weitere Informationen zu dieser Erweiterung finden Sie in diesem Artikel: http://. laravelacademy .org/post/4396.html.

PHP 5.5.0+ verfügt über diese integrierte Erweiterung. Die folgenden Einstellungen werden zum Konfigurieren und Optimieren der Zend OPcache-Erweiterung in der php.ini-Datei verwendet:

  • opcache.memory_consumption = 64: Der für den Opcode-Cache zugewiesene Speicher (Einheit ist MB). Der zugewiesene Speicher sollte in der Lage sein, die von allen PHP-Skripten in der Anwendung kompilierten Opcodes zu speichern Größe der Anwendung.

  • opcache.interned_strings_buffer = 16: Die Menge an Speicher, die zum Speichern residenter Zeichenfolgen verwendet wird (Einheit ist MB). Hinter den Kulissen findet der PHP-Interpreter mehrere Instanzen derselben Zeichenfolge und speichert die Zeichenfolge. Wenn dieselbe Zeichenfolge erneut verwendet wird, verwendet der PHP-Interpreter einen Zeiger. Der Zweck besteht darin, Speicher zu sparen. Standardmäßig werden PHP-residente Zeichenfolgen in jedem PHP-Prozess isoliert. Diese Einstellung ermöglicht es dem PHP-FPM-Prozesspool, alle prozessresidenten Zeichenfolgen in einem gemeinsamen Puffer zu speichern, damit sie im PHP-FPM-Prozesspool verarbeitet werden können werden zwischen mehreren Prozessen referenziert, was mehr Speicher spart.

  • opcache.max_accelerated_files = 4000: Die maximale Anzahl von PHP-Skripten, die im Opcode-Cache gespeichert werden können. Der Bereich dieses Werts liegt zwischen 2000 und 100000. Dieser Wert muss größer sein als dass in PHP-Anwendungen die Anzahl der Dateien groß ist.

  • opcache.validate_timestamps = 1: Wenn der Wert dieser Einstellung 1 ist, prüft PHP nach einem bestimmten Zeitraum, ob sich der Inhalt des PHP-Skripts geändert hat festgelegt durch opcache.revalidate_freq angegeben. Wenn der Wert dieser Einstellung 0 ist, prüft PHP nicht, ob sich der Inhalt des PHP-Skripts geändert hat, und wir müssen die zwischengespeicherten Opcodes selbst löschen. Es wird empfohlen, ihn in der Entwicklungsumgebung auf 1 und in der Produktionsumgebung auf 0 zu setzen.

  • opcache.revalidate_freq = 0: Legen Sie fest, wie oft (in Sekunden) überprüft werden soll, ob sich der Inhalt des PHP-Skripts geändert hat. Die Einstellung auf 0 Sekunden bedeutet, dass die PHP-Datei nur dann bei jeder Anfrage erneut validiert wird, wenn opcache.validate_timestamps auf 1 gesetzt ist. Daher wird die PHP-Datei in der Entwicklungsumgebung jedes Mal erneut validiert nicht in der Produktionsumgebung überprüfen.

  • opcache.fast_shutdown = 1: Diese Einstellung ermöglicht es dem Opcode, einen schnelleren Abschaltschritt zu verwenden, sodass die Objektzerstörung und Speicherfreigabe dem Speichermanager von Zend Engine überlassen werden.

Datei-Upload

Wenn Ihre Anwendung das Hochladen von Dateien zulässt, ist es am besten, die maximale Dateigröße festzulegen, die hochgeladen werden kann. Darüber hinaus legen Sie am besten die maximale Anzahl an Dateien fest, die gleichzeitig hochgeladen werden können:

file_uploads = 1upload_max_filesize = 10Mmax_file_uploads = 3
  • 1

  • 2

  • 3

Standardmäßig erlaubt PHP das Hochladen von 20 Dateien in einer einzigen Anfrage. Die maximal hochgeladene Datei beträgt hier 2 MB Es können höchstens 3 Dateien hochgeladen werden, und jede Datei kann bis zu 10 MB groß sein. Stellen Sie diesen Wert nicht zu groß ein, da es sonst zu einer Zeitüberschreitung kommt.

Hinweis: Wenn Sie große Dateien hochladen müssen, muss die Konfiguration des Webservers entsprechend angepasst werden. Passen Sie zusätzlich zur Einstellung in php.ini die Einstellung client_max_body_size in der Konfiguration des virtuellen Nginx-Hosts an.

Maximale Ausführungszeit

max_execution_time in der Datei php.ini wird verwendet, um die maximale Zeit festzulegen, die ein einzelner PHP-Prozess ausgeführt werden kann, bevor er beendet wird. Diese Einstellung ist standardmäßig auf 30 Sekunden eingestellt und es wird empfohlen, sie auf 5 Sekunden festzulegen:

max_execution_time = 5

Hinweis: Sie können die Funktion set_limit_time() in einem PHP-Skript aufrufen um diese Einstellung zu überschreiben.

Angenommen, wir möchten einen Bericht erstellen und die Ergebnisse in eine PDF-Datei umwandeln. Diese Aufgabe kann 10 Minuten dauern, und wir möchten die PHP-Anfrage auf keinen Fall 10 Minuten warten lassen . Wir sollten eine separate PHP-Datei schreiben, sie in einem separaten Hintergrundprozess ausführen lassen, die Webanwendung kann in nur wenigen Millisekunden einen separaten Hintergrundprozess forken und dann die HTTP-Antwort zurückgeben:

<?phpexec(&#39;echo "create-report.php" | at now&#39;);echo &#39;report pending...&#39;;
  • 1

  • 2

  • 3

create-report.php In einem separaten Hintergrund ausführen Prozess, und Sie können die Datenbank aktualisieren oder Berichte per E-Mail an Empfänger senden. Diese Verwendung ist jedoch seltener. In Bezug auf Sicherheit, Skalierbarkeit und Wartbarkeit implementieren wir ähnliche Funktionen. Zu den verwandten Komponenten gehören PHPResque et al.

Verwaltung von Sitzungen

Der standardmäßige Sitzungshandler von PHP kann große Anwendungen verlangsamen, da dieser Handler Sitzungsdaten auf der Festplatte speichert, was unnötige Festplatten-E/A und Zeitverschwendung verursacht. Wir sollten Sitzungsdaten im Speicher behalten, zum Beispiel mit Memcached oder Redis. Dies hat den zusätzlichen Vorteil, dass es später einfacher zu skalieren ist. Wenn die Sitzungsdaten auf der Festplatte gespeichert sind, ist das Hinzufügen zusätzlicher Server unpraktisch. Wenn die Sitzungsdaten in Memcached oder Redis gespeichert sind, kann jeder verteilte PHP-FPM-Server auf die Sitzungsdaten zugreifen.

Wenn Sie Sitzungsdaten in Memcached speichern möchten, müssen Sie Folgendes konfigurieren:

session.save_handler = &#39;memcached&#39;session.save_path = &#39;127.0.0.1:11211&#39;2

Gepufferte Ausgabe

Wenn Sie mehr Daten in weniger Blöcken senden, und stattdessen Durch das Senden von weniger Daten in mehr Blöcken wird das Netzwerk effizienter; das heißt, die Bereitstellung von Inhalten an den Browser des Besuchers in weniger Fragmenten kann die Gesamtzahl der HTTP-Anfragen reduzieren.

Daher müssen wir PHP die Ausgabe puffern lassen. Standardmäßig hat PHP die Ausgabepufferung von 4096 Bytes aktiviert, bevor der Inhalt an den Webserver gesendet wird.

output_buffering = 4096implicit_flush = false2

Hinweis: Wenn Sie die Größe des Ausgabepuffers ändern möchten, stellen Sie sicher, dass Sie einen Wert verwenden, der ein Vielfaches von 4 (32-Bit-Systeme) oder 8 (64-Bit-Systeme) ist.

Echter Pfad-Cache

PHP speichert den von der Anwendung verwendeten Dateipfad zwischen, sodass nicht jedes Mal, wenn eine Datei eingebunden oder importiert wird, ständig nach dem Include-Pfad gesucht werden muss Dieser Cache wird als Real-Path-Cache (Realpath-Cache) bezeichnet. Wenn Sie große PHP-Dateien (z. B. Composer-Komponenten) ausführen und eine große Anzahl von Dateien verwenden, kann eine Erhöhung der Größe des PHP-Real-Path-Cache eine bessere Leistung erzielen.

Die Standardgröße des echten Pfadcaches beträgt 16 KB. Die genaue Größe, die für diesen Cache erforderlich ist, ist nicht einfach zu bestimmen, aber Sie können einen kleinen Trick anwenden: Erhöhen Sie zunächst die Größe des echten Pfadcaches und legen Sie fest Fügen Sie dann am Ende eines PHP-Skripts print_r(realpath_cache_size) hinzu, um die tatsächliche Größe des Pfadcaches auszugeben zu diesem realen Wert. Wir können die Größe des echten Pfadcaches in der Datei php.ini festlegen:

realpath_cache_size = 64K

Verwandte Empfehlungen:

Ausführliche Einführung in die Hauptsitzungskonfiguration in PHP.ini

Detaillierte Erläuterung gängiger Konfigurationen in php.ini

Das obige ist der detaillierte Inhalt vonOptimierung der php.ini-Konfiguration. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn