
Я использую скрипты mod_perl под Apache 2.4.18 на VPS под Ubuntu 16.04. Скрипты открывают файлы с диска (шаблоны веб-страниц). Время от времени они перестают видеть эти файлы, журнал ошибок сервера полон следующих ошибок:
[TIME] [:error] [pid PID:tid TID] ошибка файла - ИМЯ ФАЙЛА: не найден\n
Эти сообщения генерируются пакетом Template open()
, когда функция Perl возвращает false. После перезапуска Apache файлы снова видны, но только на некоторое время. Через некоторое время проблема появляется снова.
В чем может быть причина такого поведения?
решение1
Возможно, mod_perl/apache не закрывает дескрипторы файлов должным образом. Через некоторое время, когда достигается максимальное количество открытых файлов (1024 soft/4096 hard см. ulimit -Sn;ulimit -Hn
), перезапуск apache закрывает все устаревшие дескрипторы.
В следующий раз, когда возникнет ошибка, вы можете исследовать эту теорию, получив pid из apache/perl.
# ps aux | grep apache
или
# pidof apache
или модуль perl, если у него есть собственный процесс..
пример вывода:
28294
Список файлов, открытых PID
# lsof -p 28294
# lsof -a -p 28294
# counting
# lsof -a -p 28294| wc -l
или
# cd /proc/28294/fd
# ls -l | less
# count open files with
# ls -l | wc -l