Heim > Backend-Entwicklung > PHP-Tutorial > PHP-Sitzungs-Garbage-Collection-Mechanismus

PHP-Sitzungs-Garbage-Collection-Mechanismus

藏色散人
Freigeben: 2023-04-08 16:48:02
nach vorne
2195 Leute haben es durchsucht

Wenn in PHP keine Variable auf dieses Objekt zeigt, wird das Objekt zu Müll. PHP wird es im Speicher zerstören; dies ist der GC-Müllentsorgungsmechanismus von PHP, um einen Speicherüberlauf zu verhindern.

Die Aufgabe von GC besteht darin, alle Session-Informationen zu scannen, die letzte geänderte Zeit von session von der aktuellen Zeit zu subtrahieren und sie mit dem session.gc_maxlifetime-Parameter zu vergleichen. Wenn die Überlebenszeit gc_maxlifetime überschreitet. Standardmäßig 24 Minuten), löschen Sie die Sitzung.

Wenn eine gültige Anfrage auftritt, entscheidet PHP basierend auf den Werten der globalen Variablen session.gc_probability und session.gc_divisor. Standardmäßig ist

session.gc_probability = 1
session.gc_divisor = 100
Nach dem Login kopieren

Es ist sagte, dass es eine Chance von 1 % gibt, GC zu starten (das heißt, nur eine von 100 Anfragen wird mit einer der 100 Anfragen gestartet).

Wenn Ihr Webserver jedoch über mehrere Sites verfügt, wenn dort Bei mehreren Standorten kann GC bei der Verarbeitung von Sitzungen zu unerwarteten Ergebnissen führen. Der Grund dafür ist: Wenn GC funktioniert, unterscheidet es nicht zwischen Sitzungen an verschiedenen Standorten.

Wie kann dieses Problem gelöst werden?

1. Ändern Sie session.save_path oder verwenden Sie session_save_path(), um die session jeder Site in einem speziellen Verzeichnis zu speichern.

2. Verbessern Sie die Startrate von GC. Wenn die Startrate von GC zunimmt, nimmt die Leistung des Systems entsprechend ab, was nicht empfohlen wird.

3. Bestimmen Sie die Überlebenszeit des aktuellen session im Code und verwenden Sie session_destroy() delete;

session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1440
Nach dem Login kopieren

Diese drei Konfigurationskombinationen bilden den Garbage-Collection-Mechanismus der serverseitigen Sitzung

session.gc_probability und session.gc_divisor bilden die Wahrscheinlichkeit der Sitzungsbereinigung Es besteht eine gewisse Wahrscheinlichkeit, dass der Server die GC-Funktion regelmäßig aufruft, um die Sitzung zu bereinigen. Die Wahrscheinlichkeit der Bereinigung beträgt: gc_probability/gc_divisor Beispiel: 1/100 bedeutet, dass bei jeder neuen Sitzung eine Bereinigung erfolgt ist eine Wahrscheinlichkeit von

1%, dass das Garbage Collection-Programm gestartet wird, und der Reinigungsstandard ist session.gc_maxlifetime Definierte Zeit.

session.gc_divisor und session.gc_probability definieren zusammen die Wahrscheinlichkeit, mit der der gc(garbage collection 垃圾回收)-Prozess bei jeder Sitzungsinitialisierung gestartet wird.

Diese Wahrscheinlichkeit wird mit gc_probability/gc_divisor berechnet. Beispielsweise bedeutet 1/100, dass bei jeder Anfrage eine 1% Wahrscheinlichkeit besteht, dass der GC-Prozess gestartet wird. session.gc_divisor Standardmäßig ist 100.

Zum Beispiel:

session.gc_maxlifetime = 60
session.gc_divisor = 1000
session.gc_probability = 1
Nach dem Login kopieren

bedeutet, dass jedes Mal, wenn tausend Benutzer session_start() aufrufen, ein Garbage-Collection-Mechanismus zu 100 % ausgeführt wird, um nutzlose Sitzungsdateien auf der Festplatte zu löschen.

Hinweis: Im Allgemeinen wird für einige große Portale empfohlen, den session.gc_divisor zu erhöhen, um den Overhead zu reduzieren

Als nächstes werde ich anhand eines Beispiels demonstrieren, wie man es für den Aufruf von gc ( Garbage) konfiguriert Inkasso)-Prozess!

Ändern Sie durch Konfigurieren der php.ini-Datei die folgenden Informationen:

session.gc_maxlifetime = 60//当session文件在60s后还没有被访问的话,则该session文件将会被视为“垃圾文件”,并且等待gc(垃圾回收)进程的调用的时候被清理掉
session.gc_probability = 1000
Nach dem Login kopieren

Da die Wahrscheinlichkeit, dass der GC-Prozess aufgerufen wird, durch gc_probability/gc_divisor berechnet wird, werde ich hier session.gc_probability ändern 1000 und session.gc_divisor ist standardmäßig auch 1000. Der gc-Prozess wird jedes Mal aufgerufen, wenn die Funktion session_start() ausgeführt wird.

Öffnen Sie drei Sitzungen und erstellen Sie drei entsprechende session Dateien. Wenn jede Datei nicht innerhalb von 60 Sekunden aufgerufen wird, wird sie als „Junk-Datei“ betrachtet und gewartet, bis der GC-Prozess sie aufruft „Junk-Dateien“ werden unlink sein, da ich die Wahrscheinlichkeit, dass gc aufgerufen wird, durch Ändern der php.ini-Konfigurationsdatei auf 100 % geändert habe. Wenn ich also als Nächstes wieder einen Browser verwende, sollte es beim Aktualisieren der Seite nur noch sein Eine der drei verbleibenden session-Dateien ist

session.save_handler = files
Nach dem Login kopieren

, die definiert, wie die Sitzung auf der Serverseite gespeichert wird. file bedeutet das Speichern von sesion in einer temporären Datei Wenn Sie eine andere Möglichkeit zum Speichern anpassen möchten (z. B. die Verwendung einer Datenbank), müssen Sie dieses Element auf user setzen.

Verwandte Empfehlungen: „PHP-Tutorial

Das obige ist der detaillierte Inhalt vonPHP-Sitzungs-Garbage-Collection-Mechanismus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage