Linux: PHP5 Sessions zugunsten der Performance im Arbeitsspeicher ablegen
Es gibt viele verschiedene Möglichkeiten die Performance von PHP zu optimieren. Eine der Möglichkeiten ist, die PHP-Sessions in den Arbeitsspeicher anstatt auf die Festplatte auszulagern, da der RAM wesentlich schneller als eine normale Festplatte ist.
tmpfs-Mount erstellen
Um die Dateien in dem Arbeitsspeicher auszulagern, muss vorher ein normaler Ordner erstellt werden, welcher anschließend in den Arbeitsspeicher gelegt wird. Das Dateisystem nennt sich tmpfs und wird in diesem Fall unter /opt/tmpfs erstellt – dieser kann nach belieben geändert werden.
Ordner erstellen, Rechte zuweisen und das Dateisystem tmpfs zuweisen:
mkdir /opt/tmpfs
chmod 0777 /opt/tmpfs
mount -t tmpfs -o size=256M tmpfs /opt/tmpfs
Mit size kann die maximale Größe festgelegt werden, wie viel in den RAM abgelegt werden darf. Sollte nicht genügend Arbeitsspeicher und SWAP zur Verfügung stehen, können verschiedenste Probleme auftreten – kalkuliert daher die Größe ein.
File System Table (/etc/fstab) anpassen
Damit der Ordner mit dem Dateisystem tmpfs automatisch beim Neustart des Servers erstellt wird, muss folgende Zeile in die /etc/fstab Datei eintragen werden:
tmpfs /opt/tmpfs tmpfs size=256m,mode=0777 0 0
Die php.ini finden
Als Abschluss muss nun die richtige php.ini angepasst werden, damit auch wirklich die PHP-Sessions in das neue Verzeichnis (welcher nun im Arbeitsspeicher gelagert wird) unter /opt/tmpfs/ abgelegt werden. Je nach Einrichtung, Webserver und PHP-Dienst kann der Pfad der php.ini variieren. Bei dem Webserver Apache liegt diese standardmäßig unter /etc/php5/apache2/php.ini, wobei diese sich bei dem PHP5-Dienst php5-fpm unter /etc/php5/fpm/php.ini befindet und bei php5-cgi unter /etc/php5/cgi/php.ini.
Wenn der Ort dennoch nicht bekannt ist, erstellt eine php-Datei mit folgendem Inhalt:
Auf dieser Seite finden sich verschiedenste Informationen über PHP wie aktivierte Module und eben auch der aktuelle Pfad der php.ini.
Die php.ini anpassen
Es müssen nur zwei Einstellungen angepasst werden:
session.save_handler = files
session.save_path = "/opt/tmpfs"
Sollten diese Werte bereits existieren, ändert diese entsprechend ab. Ansonsten fügt diese Zeilen an der passenden Stelle ein.
Änderungen übernehmen
Um nun die Änderungen zu übernehmen, muss der Webserver/PHP-Dienst neugestartet werden.
Apache2:
/etc/init.d/apache2 restart
PHP5-FPM:
/etc/init.d/php5-fpm reload
(Sollte ein Reload nicht ausreichen, dann restart verwenden.)
Fertig! Das war’s!
Fertig! Die PHP-Sessions werden nun viel schneller unter dem Pfad /opt/tmpfs/ abgelegt und sollte dadurch die Performance von PHP steigern. Die Dateien der Sessions beginnen immer mit dem Dateinamen sess_ und können mit dem folgenden Befehl aufgelistet werden:
ls /opt/tmpfs/sess_*
Unter /opt/tmpfs können alle möglichen Daten abgelegt werden, die schnell verarbeitet werden sollen und sind nicht nur auf PHP-Sessions begrenzt. Die Durchschnittsgröße einer Session-Datei bei mir ist etwa 300 Byte – nicht einmal ein Kilobyte und nach knapp einer Woche mit insgesamt 600 Sessions verbrauchen diese etwa 2 Megabyte an Speicherplatz. Die Session-Files brauchen also im Normalfall kaum an Speicherplatz und man sollte auf normal-besuchten Seiten keinen großen Speicherverbrauch erwarten.