mod_perl-Skripte erkennen das Dateisystem nach einiger Zeit nicht mehr

mod_perl-Skripte erkennen das Dateisystem nach einiger Zeit nicht mehr

Ich verwende mod_perl-Skripte unter Apache 2.4.18 auf einem VPS unter Ubuntu 16.04. Die Skripte öffnen Dateien von der Festplatte (Webseitenvorlagen). Von Zeit zu Zeit werden diese Dateien nicht mehr angezeigt. Das Server-Fehlerprotokoll ist voll mit den folgenden Fehlern:

[TIME] [:error] [pid PID:tid TID] Dateifehler - DATEINAME: nicht gefunden\n

Diese Meldungen werden vom Template-Paket generiert open(), wenn die Perl-Funktion „False“ zurückgibt. Nach einem Apache-Neustart sind die Dateien wieder sichtbar, allerdings nur für eine gewisse Zeit. Nach einer Weile tritt das Problem erneut auf.

Was kann der Grund für ein solches Verhalten sein?

Antwort1

Möglicherweise schließt mod_perl/apache die Dateihandles nicht richtig. Nach einiger Zeit, wenn die maximale Anzahl offener Dateien erreicht ist (1024 Soft/4096 Hard ulimit -Sn;ulimit -Hn), schließt der Neustart von Apache alle veralteten Handles.

Wenn der Fehler das nächste Mal auftritt, können Sie diese Theorie untersuchen, indem Sie die PID von Apache/Perl abrufen.

# ps aux | grep apache

oder

# pidof apache

oder Perl-Modul, wenn es einen eigenen Prozess hat.

Beispielausgabe:

28294

Von einer PID geöffnete Dateien auflisten

# lsof -p 28294
# lsof -a -p 28294
# counting
# lsof -a -p 28294| wc -l

oder

# cd /proc/28294/fd
# ls -l | less
# count open files with
# ls -l | wc -l

verwandte Informationen