Пожалуйста подскажите, сколько виртуальных сайтов
может держать Apache 2. У меня он начал сбоить на
500 сайтах - отказывается запускаться.
И как с этим бороться? Зпускать второй экземпляр или
есть какие то настройки?
Я где-то читал о 50000.>Пожалуйста подскажите, сколько виртуальных сайтов
>может держать Apache 2. У меня он начал сбоить на
>500 сайтах - отказывается запускаться.Может просто не может открыть много файлов?
Надо делать общий лог.
Что пишет при отказе?>И как с этим бороться? Зпускать второй экземпляр или
>есть какие то настройки?
Пишет так:
[warn] new file descriptor 1024 is too large; you probably need to rebuild Apache with a larger FD_SETSIZE (currently 1024).Это ядро не дает открыть или у Apache есть своя настройка? если дело в ядре (Linux 2.4.20), то потянет больше дескрипторов?
Ядро.просто изменить в текущей сессии - комманда ulimit (от рута)
или патчить апача - разбирайся с rlimit(я не менял таким образом число файлов, но наверно должно помочь)
при старте апача я вставила ulimit -n 3000 и тогда пропала ошибка too many open files (она была до той, которую я описала)без ulimit он просто вываливался уже при этом количестве файлов...
Да, не прав был, признаю. Это огграниечние ничего
общего к rlimit не имеет.Стало интересно даже :).
Не пробовала перекомпилировать, как советует лог апача?
>Не пробовала перекомпилировать, как советует лог апача?да, может попробую, только пока не ясно как это сделать: не нашла пока директивы при компиляции подходящей... :( у разработчиков тоже что-то не написано про такое... буду искать.
>Не пробовала перекомпилировать, как советует лог апача?Если для каждого виртуального сервера используется своя пара access/error логов, то дело в этом. При 500 клиентах, апач будет держать только для VirtualHost 1000 открытых файлов. Делай один общий access/error лог.
Или в начало apachectl (не рекомендую, лучше один лог) добавь ulimit -n 3000, до этого поэксперементируй, запусти эту команду в sh и посмотри по ulimit -a изменились ли параметры, в зависимости от ОС может потребоваться пересобрать или тюнить ядро.
>Делай один общий access/error лог.
это неудобно пользователям, каждому нужны свои логи.>Или в начало apachectl (не рекомендую, лучше один лог) добавь ulimit -n
>3000
у меня в старте апача стоит ulimit -n 3000
до того, как я поставила ulimit - была ошибка too many open files, теперь ее нет - а есть [warn] new file descriptor 1024 is too large; you probably need to rebuild Apache with a larger FD_SETSIZE (currently 1024).как будто теперь ядро разрешает - т.е. ошибка для апача не внешняя,- а сам апач не позволяет открыть дескриптор больший 1024. мне непонятно как апач пересобрать с большим кол-во дескрипторов (в логе апач это советует)
> >Делай один общий access/error лог.
>это неудобно пользователям, каждому нужны свои логи.Дай пользователям доступ к cgi-скрипту который ведерет из одного большого лога только относящуюся к текущему пользователю инфромацию. Или раз день распределяй из этого файла логи по директориям пользователя. В первом случае клиенты смогут в realtime смотреть errorlog, во втором запускать webanalyzer.
>у меня в старте апача стоит ulimit -n 3000
>до того, как я поставила ulimit - была ошибка too many open
>files, теперь ее нет - а есть [warn] new file
>descriptor 1024 is too large;
>you probably need to rebuild Apache
>with a larger FD_SETSIZE (currently 1024).Пересобири апач указав -DFD_SETSIZE=3000 при сборке
Перед этим нужнл пересобрать ядро изменив размер fd_set.
В linux это делается изменением значения __FD_SETSIZE в include/linux/posix_types.h:
#define __FD_SETSIZE 1024
>Дай пользователям доступ к cgi-скрипту который
>ведерет из одного большого лога только
>относящуюся к текущему пользователю инфромацию.По-моему именно это и называется "Убей сервер своими руками" :)
Какой-бы быстрой программа разбора не была, она всяко потратит
изрядно ресурсов, на то, чтоб лог отпарсить.Просто тем кому НУЖЕН лог - давай его.
Остальных - в общий. 90% пользователей
и не знают что это такое.
>По-моему именно это и называется "Убей сервер своими руками" :)
>Какой-бы быстрой программа разбора не была, она всяко потратит
>изрядно ресурсов, на то, чтоб лог отпарсить.Целиком лог никто и не парсит, только послдние пару сотен записей в error_log. Клиенту ведь почти всегда нужно посмотреть почему только что запущенный скрипт вернул ошибку. В других случаях может смотреть лог за прошлые дни из архива, которые уже по пользователям рассортированы.
>Целиком лог никто и не парсит, только послдние пару сотен записей в
>error_log. Клиенту ведь почти всегда нужно посмотреть почему только что запущенный
>скрипт вернул ошибку. В других случаях может смотреть лог за прошлые
>дни из архива, которые уже по пользователям рассортированы.Ну если только хвост парсить - можно.
Хотя для просмотра ошибок гораздо удобнее написать в скрипте:
use CGI::Carp 'fatalsToBrowser';
По крайней мене я только так и отлаживаю. А в логи - это
посмотреть левые ссылки.
касательно файловых дескрипторов и разбиения логов нашлась инфа на http://httpd.apache.org/docs-2.0/vhosts/fd-limits.html там же указана готовая утилита для разбора логов по вирт.хостам.за участие в решении проблемы всем спасибо! ;)
>
>Перед этим нужнл пересобрать ядро изменив размер fd_set.для фри 4.10 это подойдет? Я не нашел такой
>
>Перед этим нужнл пересобрать ядро изменив размер fd_set.для фри 4.10 это подойдет? Я не нашел такой опции в ядре:(
>Если для каждого виртуального сервера используется своя пара access/error логов, то дело
>в этом. При 500 клиентах, апач будет держать только для VirtualHost
>1000 открытых файлов. Делай один общий access/error лог.
вот это правильное решение. По крайней мере на многих крупных серверах делают именно так.>Или в начало apachectl (не рекомендую, лучше один лог) добавь ulimit -n
>3000, до этого поэксперементируй, запусти эту команду в sh и посмотри
>по ulimit -a изменились ли параметры, в зависимости от ОС может
>потребоваться пересобрать или тюнить ядро.Это ограничение не имеет ничего общего к лимитам системы, выставляемым через rlimits (комманда ulimit). Это ограничение на вызов ядра select, который не принимает дескриптор с номером более 1023.
2 solotony
>вот это правильное решение. По крайней мере на многих крупных серверах >делают именно так.а потом, для каждого пользователя его разбирать придется скриптами? ведь каждому узеру нужен его лог (особенно , если у него perl и т.д.)
to MKа вопрос:
как тебя допустили до руления хостингом в 500 клиентов ?
Если тебе есть, что умного сказать по поводу максимального
количества файловых дескрипторов (слово знакомо?), или сервера
Apache 2, то с удовольствием тебя выслушаю (может Sun-овский сервер
прорекламируешь?).>to MK
>
>а вопрос:
>как тебя допустили до руления хостингом в 500 клиентов ?