Die PHP-Sitzungsbereinigung schlägt fehl

Created:

2016-11-16 13:15:26 UTC

Modified:

2017-08-17 08:29:50 UTC

2

Was this article helpful?


Have more questions?

Anfrage einreichen

Die PHP-Sitzungsbereinigung schlägt fehl

Applicable to:

  • Plesk 12.5 for Linux
  • Plesk 12.0 for Linux
  • Plesk 11.0 for Linux
  • Plesk 11.5 for Linux
  • Plesk 10.4 for Linux/Unix
  • Plesk Automation

Kennzeichen

  1. Der Ordner, der die PHP-Sitzungen enthält, besitzt sehr viele Dateien:

    ~# ls -l /var/lib/php/session | wc -l
    1139718
    
  2. Bei der Ausführung von /etc/cron.hourly/plesk-php-cleanuper steigt die CPU-Auslastung auf 100% an.

  3. Der Versuch, alle laufenden PHP-Sitzungsprozesse herauszufinden, schlägt fehl und es wird folgender Fehler angezeigt:

    ~# [ -x /usr/lib64/plesk-9.0/maxlifetime ] && [ -d /var/lib/php/session ] && find /var/lib/php/session -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib64/plesk-9.0/maxlifetime) ! -execdir fuser {} \; -delete
        Cannot open a network socket.
        Cannot open /proc directory: Too many open files
        fuser: error while loading shared libraries: libc.so.6: cannot open shared object file: Error 24
        find: Failed to save working directory in order to run a command on `sess_fch2h2dm7s73t0g09r3dmepdp0': Too many open files
    

Ursache

Das Skript plesk-php-cleanuper enthält die Zeichenkette ! -execdir fuser {} \ , wodurch jede Datei im Verzeichnis /var/lib/php/session geöffnet wird und überprüft wird, ob sie auch nicht von einem Arbeitsprozess genutzt wird und somit gelöscht werden kann. Jedoch ist die maximale Anzahl an offenen Dateien standardmäßig auf 1024 festgelegt.

Lösung

  1. Leeren Sie /var/lib/php/session mithilfe des Skripts ohne das Checker-Tool:

    ~# [ -x /usr/lib64/plesk-9.0/maxlifetime ] && [ -d /var/lib/php/session ] && find /var/lib/php/session -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib64/plesk-9.0/maxlifetime) -delete
    
  2. Erhöhen Sie die Grenze für offene Dateien auf den erforderlichen Wert.

Um die maximale Anzahl an offenen Dateien abzurufen, müssen Sie folgenden Befehl ausführen:

    ~# ulimit -a
    open files                      (-n) 1024

Fügen Sie ulimit -n 30480 zu /etc/cron.hourly/plesk-php-cleanuper hinzu:

    ~#cat /etc/cron.hourly/plesk-php-cleanuper
    ~#!/bin/sh
    ~ulimit -n 30480
  1. Starten Sie den gewünschten Cron-Job erneut und beobachten Sie, ob er erfolgreich durchgeführt wird.
Haben Sie Fragen? Anfrage einreichen
Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.