
Eu uso scripts mod_perl no Apache 2.4.18 em um VPS no Ubuntu 16.04. Os scripts abrem arquivos do disco (modelos de páginas da web). De vez em quando, eles param de ver esses arquivos, o log de erros do servidor fica cheio dos seguintes erros:
[TIME] [:error] [pid PID:tid TID] erro de arquivo - FILENAME: não encontrado\n
Essas mensagens são geradas pelo pacote Template quando open()
a função Perl retorna false. Após a reinicialização do Apache, os arquivos ficam visíveis novamente, mas apenas por algum tempo. Depois de um tempo, o problema reaparece.
Qual pode ser a razão de tal comportamento?
Responder1
Talvez o mod_perl/apache não esteja fechando os identificadores de arquivos corretamente. Depois de algum tempo, quando a quantidade máxima de arquivos abertos é atingida (1024 soft/4096 hard see ulimit -Sn;ulimit -Hn
), a reinicialização do apache fecha todos os identificadores obsoletos.
Da próxima vez que o erro ocorrer, você poderá investigar essa teoria obtendo o pid do Apache/Perl.
# ps aux | grep apache
ou
# pidof apache
ou módulo perl se tiver um processo próprio.
saída de amostra:
28294
Listar arquivo aberto por um PID
# lsof -p 28294
# lsof -a -p 28294
# counting
# lsof -a -p 28294| wc -l
ou
# cd /proc/28294/fd
# ls -l | less
# count open files with
# ls -l | wc -l