Пределы дескрипторов файлов
При использовании большого количества виртуальных хостов Apache может столкнуться с недостатком доступных дескрипторов файлов (иногда называемых дескрипторами файлов), если каждый виртуальный хост указывает отдельные файлы логов. Общее количество дескрипторов файлов, используемых Apache, составляет один для каждого отдельного файла журнала ошибок, один для каждой другой директивы файлов журнала, плюс 10-20 для внутренних нужд. Операционные системы Unix ограничивают количество дескрипторов файлов, которые может использовать процесс; это ограничение обычно составляет 64 и может быть увеличено до большого жесткого предела.
Хотя Apache пытается увеличить это ограничение по мере необходимости, это может не сработать, если:
- Ваша система не предоставляет вызов
setrlimit(). - Вызов
setrlimit(RLIMIT_NOFILE)не работает на вашей системе (например, Solaris 2.3) - Количество требуемых дескрипторов файлов превышает жесткий предел.
- Ваша система накладывает другие ограничения на дескрипторы файлов, такие как ограничение на потоки 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