Запуск процессов apache сверх заданного числа при наличии свободных ресурсов

12 3
MVH
На сайте с 03.05.2005
Offline
64
MVH
3348

Скажите, как сделать запуск дочерних процессов апача следующим образом:

если максимальное число одновременно работающих процессов, установленное в конфиге, уже задействовано, а запустить новый процесс всё же надо, то проверялись бы свободная оперативная память и загруженность процессора и, если есть свободные ресурсы, то новый процесс запускался бы.

Т.е., например, надо запустить новый процесс, а оперативной памяти свободно, например, больше 100 Мб и процессор загружен менее чем на 70%, то новый процесс запускался бы. А если, оперативки осталось меньше 100 Мб, а проц. загружен более, чем на 70%, то новый процесс не запускался бы.

Может модуль такой есть?

A4
На сайте с 09.08.2007
Offline
55
#1

Вариант попроще: спрятать apache за nginx\lighttpd и урезать количество деток в n раз.

Настройка nginx и сопутствующего софта на freebsd/debian. Контакт через PM.
MVH
На сайте с 03.05.2005
Offline
64
MVH
#2
Alexei42:
Вариант попроще: спрятать apache за nginx\lighttpd и урезать количество деток в n раз.

Этот вариант мне сейчас не подходит, т.к. мне решение под Plesk надо, а он только с apache работает. Да и решения с дополнительным фронт сервером, это всё же не альтернатива. По любому, хочется авторегулировку кол-ва процессов apache сделать, что бы и простоя из-за нехватки процессов апача не было и не бояться, что он начнёт в swap другие процессы вытеснять, ОЗУ пожирая.

P.S.: вопрос тем, кто настраивал nginx в качестве фронт сервера для апача. Насколько прозрачно его присутствие будет для программ, работающих под апачем (PHP и т.п.)? С HTTPS работу сложно организовать в такой схеме?

Roxis
На сайте с 19.11.2006
Offline
40
#3

nginx с плеском работать будут, только после редактирования доменов придётся конфиги опять менять )

фронтенд как акселератор и простоя быть не должно

при правильной конфигурации скрипты не заметят появление фронтенда

MVH
На сайте с 03.05.2005
Offline
64
MVH
#4
Roxis:
nginx с плеском работать будут, только после редактирования доменов придётся конфиги опять менять )

Я это и имел ввиду :)

Roxis:
фронтенд как акселератор и простоя быть не должно

Под простоем я имел ввиду ожидание в связи с нехваткой процессов апача. А нехватка эта может быть, если будут выполняться "долгие" скрипты. Например, если на сервере работает скрипт определения PR и тИЦ, то процесс апача может несколько секунд по идее висеть, ожидая ответа от удалённого сервера. А, если это будет делаться в массовом порядке и при этом ещё будут на сервере висеть другие сайты, то необходимое в данный момент количество процессов апача будет различаться время от времени. Поэтому хочу сделать авторегулирование. Ведь без автоматизации, максимальное кол-во процессов апача надо будет на газок выставлять, в зависимости от загрузки в определённый период. Я вообще люблю всё автоматизировать, что бы лишний раз не лазить самому никуда :)

Andreyka
На сайте с 19.02.2005
Offline
822
#5
MVH:
Этот вариант мне сейчас не подходит, т.к. мне решение под Plesk надо, а он только с apache работает.

Я ставил на plesk nginx как акселлератор, никаких переделок ненадо.

Не стоит плодить сущности без необходимости
Lupus
На сайте с 02.11.2002
Offline
241
#6

Самое простое, что приходит в голову, это вынести эти настройки в отдельный файлик, генерируемый скриптом и подключить его к конфигу через include. Скрипт может по крону переписывать настройки и посылать SIGHUP апачу.

There are two types of people in this world: 1. Those who can extrapolate from incomplete data.
MVH
На сайте с 03.05.2005
Offline
64
MVH
#7
Andreyka:
Я ставил на plesk nginx как акселлератор, никаких переделок ненадо.

Я про добавление хостов, управление SSL сертификатами через Plesk и т.п. Ведь, если nginx поставить, то надо же ведь будет прописывать данные о тех же виртуальных хостах не только в апаче, но и в nginx. А Plesk прописывать данные только в конфигах апача, насколько я знаю.

P.S.: а нет ли модуля, конвертирующего данные о виртуальных хостах и т.п. апача в конфиги nginx. Т.е. модуля, который бы синхронизировал, так сказать, настройки апача и nginx? Поменялось что-то в настройках вирт. хостов апача, запустился модуль и сделал аналогичный записи в nginx.

Lupus
На сайте с 02.11.2002
Offline
241
#8
MVH:
надо же ведь будет прописывать данные о тех же виртуальных хостах не только в апаче, но и в nginx

Надо, если настраивать nginx на отдачу статики. Если только акселератором, то не надо.

MVH
На сайте с 03.05.2005
Offline
64
MVH
#9
Lupus:
Самое простое, что приходит в голову, это вынести эти настройки в отдельный файлик, генерируемый скриптом и подключить его к конфигу через include. Скрипт может по крону переписывать настройки и посылать SIGHUP апачу.

Костыль получается :) Всё же хочется сделать, что бы проверка осуществлялась именно при порождении дочерних процессов. Так по идее, информация о загруженности системы будет получаться настолько оперативно, насколько это возможно и с меньшими затратами.

Вообщем, как я понял готового решения нет... что ж, придётся отложить до лучших времён... :(

MVH
На сайте с 03.05.2005
Offline
64
MVH
#10
Lupus:
Надо, если настраивать nginx на отдачу статики. Если только акселератором, то не надо.

Скажите, правильно ли я понимаю, что в данном случае (если только как акселератор) поведение будет следующее:

пользователь запрашивает страницу у nginx, который будет обращаться за этой страницей к апачу. Апач выдаст эту страницу, nginx будет держать её у себя в оперативной памяти и отдавать пользователю. Так? Т.е. выгода будет, если у пользователя медленный канал и для него будет отведён процесс nginx, который жрёт намного меньше ресурсов, чем апач.

А как будут отдаваться в этом случае большие файлы (в несколько десятков мегабайт, например)? Как я понимаю, когда пользователь запрашивает по HTTP файл у апача, то процесс апача порционно считывает данные из файла и передаёт их в поток, открытый с пользователем. А, если в качества только акселератора будет nginx, то как он себя поведёт в данном случает? Т.е. если пользователь обратиться к nginx за большим файлом, то тот в свою очередь обратиться к апачу. И как будет отдаваться большой файл в данном случае? Будет как-то перекидываться поток считывания файла от апача к nginx'у? Или как?

P.S.: прошу сильно не пинать, я только недавно начал вникать в эту тему. :)

12 3

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