Spec-Zone.ru › Apache HTTP Server

Ограничения на количество дескрипторов файлов

При использовании большого числа виртуальных хостов Apache может исчерпать доступные дескрипторы файлов (иногда называемые файловыми дескрипторами), если для каждого виртуального хоста заданы отдельные файлы журналов. Apache использует по одному дескриптору файла для каждого отдельного файла журнала ошибок, по одному для каждой другой директивы файла журнала, а также 10–20 дескрипторов для внутреннего использования. Операционные системы Unix ограничивают число дескрипторов файлов, которые может использовать процесс; обычно ограничение составляет 64, но его, как правило, можно увеличить до большого жёсткого предела.

Хотя Apache пытается увеличить ограничение по мере необходимости, это может не сработать, если:

  1. В вашей системе не предусмотрен системный вызов setrlimit().
  2. Вызов setrlimit(RLIMIT_NOFILE) не работает в вашей системе (например, в Solaris 2.3).
  3. Требуемое число дескрипторов файлов превышает жёсткий предел.
  4. В вашей системе действуют другие ограничения на дескрипторы файлов, например ограничение, согласно которому потоки stdio могут использовать только дескрипторы файлов с номерами ниже 256. (Solaris 2)

В случае возникновения проблем можно:

  • Уменьшить число файлов журналов: не задавать файлы журналов в разделах <VirtualHost>, а вести записи только в основные файлы журналов. (Подробнее об этом см. ниже в разделе Разделение файлов журналов.)
  • Если ваша система подпадает под пункты 1 или 2 (выше), увеличьте ограничение на число дескрипторов файлов перед запуском Apache с помощью такого сценария, как:
    #!/bin/sh
    ulimit -S -n 100
    exec httpd

Разделение файлов журналов

Если вы хотите записывать данные для нескольких виртуальных хостов в один файл журнала, может потребоваться впоследствии разделить этот файл, чтобы выполнить статистический анализ для отдельных виртуальных хостов. Это можно сделать следующим образом.

Сначала необходимо добавить в записи журнала информацию о виртуальном хосте. Для этого можно использовать директиву LogFormat и переменную %v. Добавьте их в начало строки формата журнала:

LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost
CustomLog logs/multiple_vhost_log vhost

В результате будет создан файл журнала в общем формате журнала, но с каноническим именем виртуального хоста (указанным в директиве ServerName), добавленным в начало каждой строки. (Подробнее о настройке файлов журналов см. в разделе mod_log_config.)

Чтобы разделить файл журнала на отдельные файлы (по одному для каждого виртуального хоста), можно использовать программу split-logfile. Эта программа находится в каталоге support дистрибутива Apache.

Запустите программу с помощью команды:

split-logfile < /logs/multiple_vhost_log

При запуске с именем файла журнала виртуальных хостов эта программа создаст отдельный файл для каждого виртуального хоста, записи о котором есть в файле журнала. Каждый файл будет называться hostname.log.

© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/vhosts/fd-limits.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API