
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