Apache mpm itk или apache mpm prefork что лучше
Перейти к содержимому

Apache mpm itk или apache mpm prefork что лучше

  • автор:

mpm-prefork + mpm-itk. Нужно ли увеличивать MaxSpareServers?

Здравствуйте.
VPS 2гб оперативы.
Apache2
mpm-itk и mpm-prefork
Нужно ли увеличивать MaxSpareServers, если все сайты работают под своими UID/GID? А сами стартовые процессы запускаются под www-data. И колличество MaxSpareServers (в моём случае 20 штук) работают под www-data.

А если новые запросы на сайты параждают apache процесс под своим uid/guid, то получается, что в данном случае бессмысленно увеличивать MaxSpareServers.

Я прав? Если не так, поправьте пожалуйста. Спасибо.

 StartServers 5 MinSpareServers 5 MaxSpareServers 20 MaxConnectionsPerChild 0 MaxRequestsPerChild 4096 #MaxRequestWorkers 250 MaxClients 64 ServerLimit 64 

vebmaster
02.09.18 14:20:27 MSK

При использовании mpm-itk у вас при каждом HTTP-запросе соответствующий серверный процесс (который изначально пашет с root-привилегиями) выдает дополнительный fork() и в порожденном процессе уже происходит переключение эффективных UID/GID либо на дефолтные значения, либо на конкретные значения, указанные в конфигурации виртуального хоста, ну и далее — обработка запроса. По завершении обработки запроса этот дополнительный процесс-обработчик завершает свою работу. Родительский серверный процесс при этом просто ждет завершения дочернего.

Вроде так там всё работает. Так что, это не отменяет использование параметра MaxSpareServers и прочих. Да и как-то нелогично было бы, если бы ваша гипотеза была верна.

vinvlad ★★
( 03.09.18 12:08:40 MSK )
Ответ на: комментарий от vinvlad 03.09.18 12:08:40 MSK

Давайте рассмотрим вот эти 2 параметра:

MinSpareServers 5 MaxSpareServers 20 

Запускаем apache2. У нас будет запущен 1 root процесс и 5 от www-data. Итого 6 процессов apache2.

Далее мы открываем «site1.local» с uid/gid «site1». Он запустится 7 процессом. Через некоторое время по таймауту этот 7 процесс с uid/gid «site1» завершится. Получается он не входит в MaxSpareServers=20, т.к. поидее должно быть 1+20 процессов висячих (резервных/ожидающих)

vebmaster
( 03.09.18 16:35:04 MSK ) автор топика
Ответ на: комментарий от vebmaster 03.09.18 16:35:04 MSK

Запускаем apache2. У нас будет запущен 1 root процесс и 5 от www-data .

А с чего вы решили, что первые 5 у вас будут от www-data и только остальные от root-а? Это где-нибудь написано?

mpm-itk is based on the traditional prefork MPM, . You will also take an additional performance hit over prefork, since there’s an extra fork per request.
.
Since mpm-itk has to be able to setuid(), it runs as root (although restricted with POSIX capabilities and seccomp v2 where possible) until the request is parsed and the vhost determined.

mpm-itk — это, вроде, «патч» поверх mpm-prefork — он добавляет туда свою логику, ну и определенные «тормоза».

vinvlad ★★
( 03.09.18 17:26:18 MSK )
Ответ на: комментарий от vinvlad 03.09.18 17:26:18 MSK

первые 5 и до 20 максимум будут от www-data, а остальные не от root, а от пользователя для mpm-itk

vebmaster
( 03.09.18 18:03:28 MSK ) автор топика
Ответ на: комментарий от vebmaster 03.09.18 18:03:28 MSK

Для того, чтобы процесс смог переключиться на конкретные UID/GID, он должен иметь изначально root-привилегии — я это имею в виду.

Анализ HTTP-заголовков осуществляется, вроде как, в контексте дочерних процессов, а не в апачевском мастер-процессе. Или нет?

vinvlad ★★
( 03.09.18 18:43:32 MSK )
Ответ на: комментарий от vebmaster 03.09.18 16:35:04 MSK

Далее мы открываем «site1.local» с uid/gid «site1». Он запустится 7 процессом .

Вот это очень сомнительно. Если на этот момент имеется какой-то свободный server-процесс, то, по идее, его и задействуют для выполнения очередного запроса.

vinvlad ★★
( 03.09.18 20:21:09 MSK )
Ответ на: комментарий от vebmaster 03.09.18 16:35:04 MSK

Далее мы открываем «site1.local» с uid/gid «site1». Он запустится 7 процессом .

Понимаете, в этот момент у вас действительно появится 7-й процесс, но этот процесс будет дочерним процессом одного из упомянутых выше 5-ти (которые вы называете «от www-data»). Ну т.е. при mpm-itk в обработке каждого запроса у вас всегда участвуют два процесса (помимо master-процесса). Так что, параметры MinSpareServers и MaxSpareServers не теряют своего смысла — они просто относятся к одному процессу из этой пары.

vinvlad ★★
( 03.09.18 21:33:38 MSK )
Ответ на: комментарий от vinvlad 03.09.18 21:33:38 MSK

спасибо, вот это и хотел узнать. А после заполнения всех 20 резервных мест, 21 процесс (не считая мастер от рута) так же будет запущен 1 процесс от www-data и 1 от него с uid/gid «site1», так получается?

Т.е. каждый запрос для mpm-itk будет занимать 2 процесса, www-data + нуженый uid/gid?

vebmaster
( 04.09.18 11:45:36 MSK ) автор топика
Ответ на: комментарий от vebmaster 04.09.18 11:45:36 MSK

Т.е. каждый запрос для mpm-itk будет занимать 2 процесса, www-data + нуженый uid/gid?

Именно так. Причем, второй процесс порождается только в момент обработки запроса, а вот первый вы можете уже иметь наготове за счет настроек MinSpareServers и MaxSpareServers. Вообще говоря, чтобы уменьшить общее число fork()-ов на высоконагруженном сервере, нужно выбирать параметр MaxSpareServers не слишком уж и маленьким — чтобы при всплесках активности использовались уже имеющиеся www-data сервера.

А после заполнения всех 20 резервных мест, 21 процесс (не считая мастер от рута) так же будет запущен 1 процесс от www-data и 1 от него с uid/gid «site1», так получается?

Ну да. Собственно, сразу заполнить все 20 резервных мест можно только при всплеске запросов — когда их сразу 20 штук поступит. А если скорость поступления будет поменьше, то дополнительные (запасные) сервера будут запускаться по мере достижения порога MinSpareServers.

vinvlad ★★
( 04.09.18 13:00:56 MSK )
Ответ на: комментарий от vinvlad 04.09.18 13:00:56 MSK

Спасибо. А где вы такие подробности узнали, есть материал где нибудь? Из того, что нашёл как правило поверхностно в 1-2 абзаца и всё равно не ясно.

Хотелось бы почитать ещё про worker, event и др.

vebmaster
( 04.09.18 15:59:18 MSK ) автор топика
Ответ на: комментарий от vebmaster 04.09.18 15:59:18 MSK

А где вы такие подробности узнали, есть материал где нибудь?

Самый надежный источник информации — исходные тексты программ )

Ну а вообще, на тему Apache 2 вроде полно книжек. На торрентах посмотрите, что там пользуется популярностью.

vinvlad ★★
( 04.09.18 16:57:29 MSK )
Ответ на: комментарий от vebmaster 04.09.18 15:59:18 MSK

. еще в инете встречаются статьи по программной архитектуре ПО — (для программистов). Вот оттуда можно много чего полезного почерпнуть.

vinvlad ★★
( 04.09.18 17:45:59 MSK )

Тюнинг spareservers — это настолько бесполезная трата времени, что представить сложно. Оптимизируют там, где чего-то нехватает. Потребление ресурсов лишним ребенком апача пренебрежительно мало по сравнению с современными говносайтами.

slowpony ★★★★
( 04.09.18 17:49:51 MSK )
Ответ на: комментарий от slowpony 04.09.18 17:49:51 MSK

Тюнинг spareservers — это настолько бесполезная трата времени, что представить сложно. Оптимизируют там, где чего-то нехватает. Потребление ресурсов лишним ребенком апача пренебрежительно мало по сравнению с современными .

Вы это еще разработчикам и пользователям Nginx скажите. ) Или тем, кто backend-часть предпочитает на «зелёных» потоках реализовывать.

Данный тюнинг нужен не из-за потребления ресурсов (хотя и это тоже в некоторых случаях стоит учитывать), а скорее для более «гладкой» и оперативной обработки всплесков активности. Хотя, конечно, запуск процесса — это сейчас не такая «дорогая» операция, как было раньше.

Не забывайте, что Apache еще и статику выдает. Модули типа mpm-itk нужны там, где имеется публичный хостинг и к серверу имеют доступ разные пользователи — под своими логинами. Там связкой Nginx + еще что-то не обойдешься.

vinvlad ★★
( 05.09.18 08:26:52 MSK )
Ответ на: комментарий от slowpony 04.09.18 17:49:51 MSK

. чтобы лишних фантазий и флуда не возникало: я про Nginx и «зеленые» потоки упомянул, потому что подобные вещи появились именно из-за того, что запуск процесса или обычного потока (thread) при высокой нагрузке обходится «дороговато».

vinvlad ★★
( 05.09.18 08:42:04 MSK )
Ответ на: комментарий от slowpony 04.09.18 17:49:51 MSK

в моём случае из-за переполнения памяти на впс начал срабатывать OOM-Killer который завершал все в подряд. Вот и начал оптимизировать апач. После нескольких изменений параметров вроде нормально

vebmaster
( 05.09.18 14:43:37 MSK ) автор топика
Ответ на: комментарий от vebmaster 05.09.18 14:43:37 MSK

Пока MaxClients позволяет плодить детей — никуда эти всплески не денутся. Один бот, два бота, три бота, вот и хрумер чей-то подоспел. А OOM можно через oom_score_adj попросить не стрелять важное.

Используемые веб-серверы

Веб-серверы обслуживают запросы пользователей к сайтам на узлах кластера ISPmanager Business.

ISPmanager работает с веб-серверами:

  • Nginx — обслуживает запросы статического содержимого;
  • Apache — обслуживает запросы статического и динамического содержимого.

Используются два веб-сервера, т. к. Nginx лучше справляется с большой нагрузкой на сервер, чем Apache, но при этом не обрабатывает динамическое содержимое. В связке Nginx обслуживает запросы статического содержимого, а Apache — динамического. Статическое содержимое передаётся пользователю в том же виде, в каком оно представлено на сервере. Динамическое содержимое перед отправкой пользователю изменяется скриптами.

Веб-серверы могут работать с несколькими WWW-доменами на одном IP-адресе. В Apache для этого используется механизм виртуальных хостов (VirtualHost), в Nginx — несколько секций server в конфигурационном файле. В конфигурационных файлах веб-серверов указываются все необходимые параметры работы сайтов. Эти параметры настраиваются на основе информации, указанной при создании WWW-домена. Подробнее см. в статье Создание WWW-домена.

Чтобы выбрать версию Apache, перейдите в Настройки кластера → Политики. В поле Режим работы web-сервера Apache выберите:

  • Prefork — Apache с модулем Prefork. При запуске создаёт несколько процессов для обработки запросов. При большом количестве запросов это позволяет быстрее их обрабатывать. Процессы работают от имени пользователя, под которым запущен Apache. В связи с этим менее безопасен по сравнению с Apache MPM-ITK и требует больше прав на файлы сайтов;
  • ITK — Apache с модулем ITK. Создаёт отдельный процесс на каждый запрос. Процесс запускается под отдельным пользователем (uid) и группой пользователя (gid). За счёт этого он более изолирован и позволяет избежать проблем с доступом процесса к файлам сайта пользователя.

PHP как модуль Apache vs PHP как FastCGI

да ничем она особо не лучше. это именно из раздела экономии на спичках: фиолетово какой бакенд за nginx — php-fpm от апача с mpm-prefork (и mpm-itk если нужны рабочие процессы под отдельными пользователями). у них обработка запросов устроена _одинаково_.

Абонементное сопровождение серверов (Debian) Отправить личное сообщение ( ), написать письмо ( ).
На сайте с 06.05.2007
17 ноября 2009, 21:35

Теоретически, на неком синтетическом тесте, если на сервере множество разных сайтов с разными сайтопользователями и нагрузка распределена на них всех равномерно, обычный apache с mod_php может даже обойти php-fpm, за счет отсутствия необходимости порождать процессы каждый раз под разными пользователями. То есть, эта связка даже хуже 🙂

Оценка производительности разных сборок apache, сборок php и режимов php FastCGI, CGI, phpFPM, mod_apache

Apache MPM-Prefork выступает в качестве основного веб сервера и запускается только от одного пользователя, который прописан в /etc/httpd/conf/httpd.conf — поэтому более опасен с т.з. безопасности т.к. если злоумышленники получат к нему доступ, то они получат доступ сразу ко всем файлам на сервере, поэтому чистый mod_apache под perfork использовать не рекомендуется, но можно, если сайт не запускается на других сборках.

User apache, Group apache — если их поменять, режим fastcgi уже не запустишь, если не менять то права на папки нужны 777 вместо стандартных 755 и на файлы 666 вместо 644, а все потому что возникает конфликт прав юзера и группы с apache .

Он более быстр и самое главное, при этой сборке доступен так нужный нам режим Fast-cgi, на котором идет большинство сайтов.

Apache MPM-ITK — немного медлительная альтернатива, апач который у каждого пользователя запускается от его имени (более безопасен mod_apache) и нет никаких проблем с правами доступа, но вместе с ним доступен только тормозной режим CGI и нет fastcgi.

nginx+phpFPM без апача — современная связка, ничего не могу сказать про нее, на ней у меня не пошел ни один из моих сайтов.

Про режимы PHP и их производительность:

Включен Nginx + apache + opcache или nginx+phpFPM+opcache

на CentOS7+ISPmanager 5lite + 1 core 2gb озу

Битрикс может оценивать производительность системы и вот так он оценил разные сборки:

cgi php 5.4 5.6 7. Оценка меньше 10 (обычно 7) независимо от сборки апач и opcache (желаемая 30).

Apache (mod_apache) php 5.6. Оценка — 50 на ITK и 70 на Perfork.

Apache (mod_apache) php 7. Оценка — 70 на ITK и 110 на Perfork.

FastCGI php 5.6. Оценка — 90 на Perfork.

FastCGI php 7. Оценка — 180 на Perfork.

phpFPM 5.6. Оценка — 80 на ITK.

phpFPM 7. Оценка — 180 на ITK.

  • СОЗДАНИЕ САЙТА
  • ПРОДВИЖЕНИЕ САЙТОВ
  • КОНТЕКСТНАЯ РЕКЛАМА
  • СОЦИАЛЬНЫЕ СЕТИ
  • ПОДДЕРЖКА

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *