Я использую скрипты mod_perl под Apache 2.4.18 на VPS под Ubuntu 16.04. Скрипты открывают файлы с диска (шаблоны веб-страниц). Время от времени они перестают видеть эти файлы, журнал ошибок сервера полон следующих ошибок:

Ошибка файла [TIME] [:error] [PID PID: TID TID] - FILENAME: не найдено \n

Эти сообщения генерируются пакетом Template, когда функция Perl open() возвращает false. После перезапуска Apache файлы снова видны, но только на некоторое время. Через некоторое время проблема появляется снова.

В чем может быть причина такого поведения?

1 ответ1

2

Возможно, 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .