Оптимизация apache - переход с модуля mpm peruser на worker
С увеличением количества виртуальных хостов на VPS постоянно стали вылетать ошибки апача вида
[warn] (9)Bad file descriptor: apr_socket_opt_set: (TCP_NODELAY)
Поиск по инету конкретного решения не дал. Но в ходе поисков была выявлена гипотеза возникновения проблемы.
Модуль mpm peruser, который использовался в моей сборке apache, для каждого нового виртуального хоста выделяет отдельный процесс (обычно несколько, в зависимости от настроек), даже если все virtual hosts принадлежат одному и тому же юзеру. Таким образом, с ростом числа сайтов банально перестает хватать ресурсов VPS. Возможно, файловых дескрипторов. По крайней мере их число на одном из форумов рекомендовали увеличить с 1024 до 4096 при перекомпиляции.
В итоге, я решил отказать от использования peruser, ибо у меня не shared хостинг и все сайты крутятся от имени одного юзера. И вместо peruser установил апач с модулем worker. Пришлось повозиться и заодно перекомпилить php и обновить ioncube loader и zend optimizer, т.к. новый апач отказался работать с not threadsafe модулями.
У меня установлен Gentoo, поэтому все команды актуальны для него.
1. Обновляем базу пакетов
emerge --sync
2. Обновляем portage
emerge portage
3. Обновляем apache
APACHE2_MPMS="worker" USE="threads" emerge apache
4. Обновляем php
USE="threads -sharedmem -postgres" emerge php
5. Zend через имердж ставиться не захотел, пришлось вручную скачивать отсюда и ложить в нужную папку /usr/lib/php5/lib/php/extensions/no-debug-zts-20060613
6. Ioncube скачивал отсюда и ложил туда же.
Поскольку я кофиги люблю править ручками, пришлось делать etc-update и вносить корректировки.
Главное, это пришлось сменить в php.ini путь для подгружаемых php модулей. Теперь они стали threadsafe
extension_dir=/usr/lib/php5/lib/php/extensions/no-debug-zts-20060613/
И прописать новые пути для zend и ioncube модулей
zend_extension_ts=/usr/lib/php5/lib/php/extensions/no-debug-zts-20060613/ZendOptimizer.so
zend_extension_ts=/usr/lib/php5/lib/php/extensions/no-debug-zts-20060613/ioncube_loader_lin_5.2_ts.so
Также не забыть сменить в httpd.conf юзера и группу, от имени которых будет работать апач
User megauser
Group megauser
Вроде бы всё. Наслаждаемся повысившейся производительностью)
Самое комментируемое: