Скрипты mod_perl перестают видеть файловую систему через некоторое время

Скрипты mod_perl перестают видеть файловую систему через некоторое время

Я использую скрипты 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

Связанный контент