
Utilizo scripts mod_perl en Apache 2.4.18 en un VPS en Ubuntu 16.04. Los scripts abren archivos desde el disco (plantillas de páginas web). De vez en cuando dejan de ver estos archivos, el registro de errores del servidor está lleno de los siguientes errores:
[TIEMPO] [:error] [pid PID:tid TID] error de archivo - NOMBRE DE ARCHIVO: no encontrado\n
Estos mensajes son generados por el paquete de plantilla cuando open()
la función Perl devuelve falso. Después del reinicio de Apache, los archivos vuelven a ser visibles, pero sólo durante un tiempo. Después de un tiempo, el problema vuelve a aparecer.
¿Cuál puede ser la razón de tal comportamiento?
Respuesta1
Quizás mod_perl/apache no cierra los identificadores de archivos correctamente. Después de un tiempo, cuando se alcanza la cantidad máxima de archivos abiertos (1024 soft/4096 hard see ulimit -Sn;ulimit -Hn
), el reinicio de Apache cierra todos los identificadores obsoletos.
La próxima vez que ocurra el error, puede investigar esta teoría obteniendo el pid de Apache/Perl.
# ps aux | grep apache
o
# pidof apache
o módulo perl si tiene un proceso propio.
salida de muestra:
28294
Archivo de lista abierto por un PID
# lsof -p 28294
# lsof -a -p 28294
# counting
# lsof -a -p 28294| wc -l
o
# cd /proc/28294/fd
# ls -l | less
# count open files with
# ls -l | wc -l