LINUX.ORG.RU
ФорумAdmin

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

 , ,


1

1

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

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

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

mpm_prefork.conf

<IfModule mpm_prefork_module>
	StartServers		 5
	MinSpareServers		 5
	MaxSpareServers		 20
	MaxConnectionsPerChild   0
	MaxRequestsPerChild	4096
	 #MaxRequestWorkers	 250
	MaxClients          	64
	ServerLimit 		64
</IfModule>

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

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

vinvlad ★★
()
Ответ на: комментарий от vinvlad

Давайте рассмотрим вот эти 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
() автор топика
Ответ на: комментарий от vebmaster

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

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

Смотрим http://mpm-itk.sesse.net/

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 ★★
()
Ответ на: комментарий от vebmaster

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

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

vinvlad ★★
()
Ответ на: комментарий от vebmaster

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

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

vinvlad ★★
()
Ответ на: комментарий от vebmaster

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

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

vinvlad ★★
()
Ответ на: комментарий от vinvlad

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

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

vebmaster
() автор топика
Ответ на: комментарий от vebmaster

Т.е. каждый запрос для 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 ★★
()
Ответ на: комментарий от vinvlad

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

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

vebmaster
() автор топика
Ответ на: комментарий от vebmaster

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

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

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

vinvlad ★★
()
Ответ на: комментарий от vebmaster

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

vinvlad ★★
()

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

slowpony ★★★★★
()
Ответ на: комментарий от slowpony

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

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

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

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

vinvlad ★★
()
Ответ на: комментарий от slowpony

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

vinvlad ★★
()
Ответ на: комментарий от slowpony

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

vebmaster
() автор топика
Ответ на: комментарий от vebmaster

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

slowpony ★★★★★
()
7 ноября 2018 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.