Оптимизация apache - переход с модуля mpm peruser на worker

Опубликовано 15 февраля 2010
и помечено как: , , , .

С увеличением количества виртуальных хостов на 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

Вроде бы всё. Наслаждаемся повысившейся производительностью)

Оставьте комментарий!

Гость
Комментатор / хотите им стать

Чтобы стать комментатором введите email и пароль. Напишите комментарий. В дальшейшем ваша связка email-пароль, позволит вам комментировать и редактировать свои данные. Не забудьте про активацию (инструкция придет на ящик, указанный при регистрации).

(обязательно)