Назад | Перейти на главную страницу

Сбой Apache; «Слишком много открытых файлов в системе»

Я запускаю Apache2 с mpm_prefork на сервере MediaTemple (dv). В последнее время в конфигурацию моего сервера не вносилось никаких существенных изменений. httpd.conf в настоящее время настроен на следующее:

MaxKeepAliveRequests 200
KeepAliveTimeout 15

<IfModule prefork.c>
    StartServers           10
    MinSpareServers        10
    MaxSpareServers        10
    MaxClients            200
    MaxRequestsPerChild   4000
</IfModule>

Но я получаю следующую ошибку незадолго до полного сбоя apache:

[Thu Jun 04 18:30:24 2009] [warn-phpd] mmap cache can't open /var/www/vhosts/mydomain.com/httpdocs/filename.php - Too many open files in system (pid 19873)

Меня раздражает то, что я присматриваю за этим сервером, чтобы перезапустить его при сбое Apache. Помогите?

Я предлагаю вам попробовать добавить такую ​​строку ulimit -n 16384 в начало файла /и т.д. / по умолчанию / apache2 а затем перезапуск.

Также см. Это ссылка на сайт.

из 'man proc':

/ proc / sys / fs / файл-макс Этот файл определяет общесистемный лимит на количество открытых файлов для всех процессов. (См. Также setrlimit (2), который может использоваться процессом для установки ограничения для каждого процесса, RLIMIT_NOFILE, на количество файлов, которые он может открывать.) Если вы получаете много сообщений об ошибках о том, что закончились дескрипторы файлов, попробуйте увеличение этого значения:

          echo 100000 > /proc/sys/fs/file-max

          The  kernel constant NR_OPEN imposes an upper limit on the

значение, которое может быть помещено в файл-макс.

          If you  increase  /proc/sys/fs/file-max,  be  sure  to 

увеличьте / proc / sys / fs / inode-max в 3-4 раза больше нового значения / proc / sys / fs / file-max, иначе у вас закончатся inodes.

   **/proc/sys/fs/file-nr**
          This (read-only)  file  gives  the  number  of  files 

в настоящее время открыт. Он содержит три числа: количество выделенных файловых дескрипторов; количество свободных файловых дескрипторов; и максимальное количество дескрипторов файлов. Ядро динамически выделяет дескрипторы файлов, но не освобождает их снова. Если количество выделенных файлов близко к максимальному, вам следует рассмотреть возможность увеличения максимального количества. Когда количество свободных дескрипторов файлов велико, вы столкнулись с пиком использования дескрипторов файлов, и вам, вероятно, не нужно увеличивать максимум.

На второе число стоит взглянуть, чтобы понять, нужно ли увеличивать первое число. Если это так, вы можете установить его в своем /etc/sysctl.conf с помощью:

fs.file-max=512000

Обратите внимание, что это устанавливает система предел; ограничение на количество пользователей устанавливается с помощью ulimit, с которым, как вы уже указали, знакомы.

Проверьте lsof, чтобы узнать, что на самом деле происходит. Превышение необоснованно высокого предела часто происходит из-за утечки или другой ошибки.

MediaTemple - это с помощью ПК Р-Виртуализация технология виртуализации? Virtuozzo построен на основе OpenVZ. В OpenVZ есть ограничение на количество открытых файлов. Может быть, ваш контейнер достиг предела?

Выполните эту команду (если можете):

cat / proc / user_beancounters

и посмотрите значения ресурса numfile.

Попробуйте запустить "ulimit -n 8192" перед запуском apache. Вероятно, он исчерпал максимальное количество открытых файлов.

Вероятно, это именно то, на что это похоже - на вашем сервере открыто больше файлов, чем ядро ​​настроено для обработки.

Я полагаю, у вас есть общий сервер? Если у вас есть root на сервере, вы можете увеличить лимит для пользователя веб-сервера с помощью ulimit -n до максимального значения, настроенного в / proc / sys / fs / file-max, но для общего сервера вам, вероятно, потребуется поговорите со своим поставщиком услуг.

Также возможно, что конкретный сервер, на котором вы находитесь, переполнен, если вы поделитесь им, и в этом случае MediaTemple придется перетасовать некоторых из вас.

Кроме того, добавляли ли вы в последнее время какие-либо новые функции к своему веб-присутствию или ваш трафик значительно увеличился?

Я решил свою проблему, добавив в / usr / sbin / apachectl следующее:

ULIMIT_MAX_FILES="ulimit -n 16384"

Проблема, кажется, утихла, по крайней мере, за последние 12 часов.