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