Im Verzeichnis var/session produziert Magento unmengen von Dateien, die nie gelöscht werden. Nicht nur beim Einloggen, sondern bei jedem neuen Besuch des Online-Shops wird eine neue Session-Datei in diesem Verzeichnis angelegt.
Eine Session-Datei kann von 2 bis 200 kb groß sein. Nicht selten erreicht der Speicherverbrauch in diesem Verzeichnis Douzente und sogar Hunderte von Gigabytes. Deshalb sollten veraltete Session-Dateien automatisch gelöscht werden.
Automatische Löschung
Die folgende Anweisung löscht alle Session-Dateien älter als 90 Tage:
find var/session/ -mtime +90 -exec rm {} \;
Die Anweisung sollte als Cron-Job hinterlegt werden, um die Session-Dateien täglich zu löschen.
Erstmalige Bereinigung
Beim erstmaligen Bereinigen des Session-Verzeichnisses kann es einige Zeit dauern, bis die Ausführung abgeschlossen ist. Um eine realistische Erwartung an die Ausführungszeit zu haben, lohnt es sich deshalb den Speicherverbrauch vorher abzufragen:
du -h var/session
Damit die Konsole nicht blockiert wird, kann die Anweisung mit dem &-Operator am Ende der Zeile in ein Prozess ausgelagert werden:
find var/session/ -mtime +90 -exec rm {} \; &
Es wird eine Prozessnummer angezeigt. Die Ausführung der Anweisung kann über den Prozess-Manager htop nachvollzogen werden.
Fehlerbehebung
Verwendet man in der Anweisung oben var/session/* (mit Strernchen) statt var/session/ (ohne Sternchen) könnte beim erstmaligen Ausführen die folgende Fehlermeldung kommen:
Argument list too long
Das hängt damit zusammen, dass durch das Sternchen die gesamte Dateiliste als Parameter übergeben wird und die in ARG_MAX festgelegte Grenze überschritten wird. Man kann sich diese Zahl wie folgt anzeigen lassen:
getconf ARG_MAX
Die Lösung für das Problem ist das Entfernen von Sternchen, also var/session/ statt var/session/* zu verwenden.