Кто нибудь использовал PHP5 с Apache2.2 MPM worket на FreeBSD6.2 или другой ОСи?

alekciy

Новичок
Кто нибудь использовал PHP5 с Apache2.2 MPM worket на FreeBSD6.2 или другой ОСи?

Собственно имтересно, какие там особености? Сейчас пересобрал Apache2.2 с MPM worket вместо дефолтного prefork и Apache не загружается ругаясь на PHP. Типа тот неправильно собран. Сижу сейчас переставляю, но не уверен, что сработает.

Главным образом интерисует потребляема ОЗУ. С prefork главный процесс Apache потребляет ~18МБ ОЗУ, дочерние ~15МБ. Каждое новое соединение это новый дочерний процесс, если скрипт работает около минуты, то потребление ОЗУ возрастает с каждым новым клиентом. Поэтому как-то ОЗУ хочется съкономить. Кто либо уже успел воспользоваться данным режимом и какие впечатления?
 

phprus

Moderator
Команда форума
alekciy
Если все упирается в скорость и потребление памяти апачем, то может быть стоит попробовать nginx и php как fastcgi?

если скрипт работает около минуты,
А что скрипт запускаемый через апач может делать около минуты? Не многовато-ли это для веба?
 

fixxxer

К.О.
Партнер клуба
>> worket вместо дефолтного prefork и Apache не загружается ругаясь на PHP. Типа тот неправильно собран.
разумеется, ибо для этого нужно собрать с thread safety.
и не факт, что будет стабильно работать (чем больше extensions, использующих внешние библиотеки, тем больше вероятность наткнуться на нереентерабельный код и получить все прелести).

use nginx;)
 

alekciy

Новичок
Автор оригинала: phprus
alekciy
Если все упирается в скорость и потребление памяти апачем, то может быть стоит попробовать nginx и php как fastcgi?
Не только может, но это был первый вариант про который я подумал в свете экономии ОЗУ. Пока лазил по поиску накнулся на описание worker-а. Теперь уже интересно сравнить эффективность этих вариантов под мою задачу. nginx уже поставил, правда не конфигурил пока, а вот fastcgi пока не разобрался, как запустить PHP скрипт по FastCGI. Не густо как-то инфы по этому поводу, особенно описания кратических вещей с которыми придется столкнуться.

Автор оригинала: phprus
А что скрипт запускаемый через апач может делать около минуты? Не многовато-ли это для веба?
Все относительно. Может и многовато. Но я хочу написать чат в духе HTTP Stream-нга в условия приближеных к условиям виртуального хостинга. Т.е. ни каких демонов на сервере, ни какого дополнительного ПО на клиенте. Чистый HTML+CSS+JavaScrip через HTTP:80.

-~{}~ 31.01.08 21:39:

Мне нравиться Apache собраный с worker! 3 процесса по 40МБ каждый. Все это спокойно держит 64 одновременных соединения, каждое соединение это скрипт посылающий на клиент данные в течении 30 сек. Может продержалось бы и больше, но мне ab больше не дала сделать одновременных запросов.

Вопрос стабильности конечно еще не ясен.
 

phprus

Moderator
Команда форума
alekciy
а вот fastcgi пока не разобрался, как запустить PHP скрипт по FastCGI.
http://php-fpm.anight.org/ и гугл по запросу "php-fpm" тебе помогут.

Но я хочу написать чат в духе HTTP Stream-нга в условия приближеных к условиям виртуального хостинга. Т.е. ни каких демонов на сервере, ни какого дополнительного ПО на клиенте.
А кто тебе в таком случае даст компилировать свой Apache MPM worker?
 

alekciy

Новичок
phprus
А разве не существует хостингов с поддежкой Apache MPM worker?

За ссылку спасибо, вот бы не подумал, что нужно искать по такому словосочетанию.

P.S. Просто я сейчас как раз и ищу оптимый способ, поэтому хочеться опробовать все возможные решения. Наверное самый быстрый вариант это будет написание своего web сервера под нужную задачу на том же С++ и подвеска его демоном, но это уже идет тогда речь о выделенном серваке. Из экономических соображений сейчас вполне мне подходит firstvds, но там дают root-а, а что мне с root-ом помещает пересобрать Apache MPM worker? Тогда и демон на сях не нужен будет, тем более его еще писать и писать придется.
 

phprus

Moderator
Команда форума
alekciy
А разве не существует хостингов с поддежкой Apache MPM worker?
Может быть и существуют. Я не знаю.

на том же С++ и подвеска его демоном
А почему обязательно на С++? Есть еще php, perl, python на которых тоже можно написать демона.

но там дают root-а, а что мне с root-ом помещает пересобрать Apache MPM worker?
А если у тебя будет рут, то зачем тебе тогда этот тяжеленный апач? Я бы в таком случае ставил nginx, особенно если учесть что у тебя много одновременных запросов.

P.S> А может эффективнее раз в секунду дергать через AJAX скрипт на сервере, который будет отдавать новые сообщения и тогда никаких длительно работающих скриптов не понадобится? Правда из-за большого количества подключений тут все-же будет лучше использовать что-то типа nginx'а.
 

alekciy

Новичок
Автор оригинала: phprus
alekciy

Может быть и существуют. Я не знаю.
Вот и я пока не знаю. Но когда я знаю, что мне нужно можно уже и искать.

Автор оригинала: phprus
А почему обязательно на С++? Есть еще php, perl, python на которых тоже можно написать демона.
Демона написать то можно. Только кто же даст пусть демона на обычном vh? Но уже если брать хост с поддежкой демонов, то почему бы сразу не заюзають скомпилированный демон? Просто мнение о том, что компилируемая программа (С, С++, Java, etc) будет потреблять заведомо меньше резурсов и потом работать эффективнее, чем интерпретируемый (ибо тут ресурсы на просец Apacha+интерпретатор+ресурсы занятые самим скриптом) имеет место быть в массовом создании. Сам я сравнительный анализ компилируемый vs интерпретируемый язык не делал, сравнивать не с чем, однако думается данное общественное мнение базируется на практических данных.

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

Автор оригинала: phprus
P.S> А может эффективнее раз в секунду дергать через AJAX скрипт на сервере, который будет отдавать новые сообщения и тогда никаких длительно работающих скриптов не понадобится? Правда из-за большого количества подключений тут все-же будет лучше использовать что-то типа nginx'а.
Это стандартное решение реализованное во многих движках для которых требуется интенсивный обмен данными с сервером. Мне данный подход не нравиться хотя бы потому что он стандартен, да и не подходит он все же. Тут баланс между скорость и качеством. Делает обновления раз в секунду и получаем минимальную задежку, пользователь доволен, сервер нет )) В условиях vh коннекты с клиентов сервер начинает посылать очень быстро.
Делаем пинание сервера реже, раз в 5, в особо клинических случах раз в 10 секунд. Сервер не возмущается, пользователи утрачивают ощущение интерактивности.
Да и сколько онлайновых пользователей вытянет такой движок? 100 пользователей онлайн и сервер пошлет всех решив что это DoS атака.

Да и что тут говорить, ты это сам отлично и без меня понимаешь. Нет, от такого варианта я отказался очень быстро и давно. Был еще вариант фронтед сделать не на аяксе, а на флеш (листал по диагонали спецу по Flex и прыгал от восторга) ибо можено ведь и сокет на клиенте держать, однако теже яица вид с боку. Бэкэндом на сервере все рано должен кто-то висеть демоном.

Да и еще одно соображение. На сколько я знаю открытие каждого нового соединения это бОльшие накладные расходы, чем просто открытие одного соединения, но висящего значительно более долгое время. В плане трафика хотя бы тем, что не пересылается куча служебной информации (HTTP headers конечно весят не десятки мегабайт, однако много маленьких запросов в течении короткого времени с большого числа клиентов и может набежат куча трафа которые совершенно не нужен).

В общем поэтому в данный момент я и пришел к схеме открытия одного достаточно долго соединения. Но как раз вот тут и вылезла другая сторона. Каждый не закрытый коннект это отдельный процесс который весит очень даже нехило в контексте использования Апача. Поэтому следущим шагом был поиск альтернативных решений. Подумалось на FastCGI, но тут я наткнулся на Apache worker. Поэтому и захотелось узнать мнение о нем у тех, кто успел его поюзать в реальных проектах. На сколько стабилен и какие могут быть особености. Поэтому и пришел на форум.
 

phprus

Moderator
Команда форума
Да и сколько онлайновых пользователей вытянет такой движок? 100 пользователей онлайн и сервер пошлет всех решив что это DoS атака.
100 запросов в секунду это далеко не DoS атака...

Кстати я тут почитал документацию к nginx'у и вот что подумал... Если реализовывать схему с запросами раз в секунду, то тут вообще можно обойтись без php. Берем nginx и его модуль ngx_http_memcached_module (http://www.sysoev.ru/nginx/docs/http/ngx_http_memcached_module.html) и собственно сам memcached. Nginx настраиваем так чтобы по заданному УРЛу он брал последние сообщения из мемкеша, а в мемкеш данные записываем php-скриптом которые будет запускаться когда кто-нибуть напишет в чат (этот скрипт пишет и в мемкеш и в базу и запускается он гораздо реже чем раз в секунду). Но я бы еще добавил в эту схему скрипт запускаемый например раз в некоторое время, который бы синхронизировал данные в мемкеше и данные в базе.

ИМХО такая схема может выдержать больше чем 100 запросов в секунду. Хотя так как я сам скорость этого решения не мерял то мое предположение о скорости это не более чем гадание на кофейной гуще :)
 

alekciy

Новичок
Автор оригинала: phprus
100 запросов в секунду это далеко не DoS атака...
Это если сервер обслуживает только один сайт.

Автор оригинала: phprus
Кстати я тут почитал документацию к nginx'у и вот что подумал... Если реализовывать схему с запросами раз в секунду, то тут вообще можно обойтись без php. Берем nginx и его модуль ngx_http_memcached_module (http://www.sysoev.ru/nginx/docs/http/ngx_http_memcached_module.html) и собственно сам memcached. Nginx настраиваем так чтобы по заданному УРЛу он брал последние сообщения из мемкеша, а в мемкеш данные записываем php-скриптом которые будет запускаться когда кто-нибуть напишет в чат (этот скрипт пишет и в мемкеш и в базу и запускается он гораздо реже чем раз в секунду). Но я бы еще добавил в эту схему скрипт запускаемый например раз в некоторое время, который бы синхронизировал данные в мемкеше и данные в базе.
Я пришел к схожей схеме. Только я хочу использовать Shared Memory и IPC. На клиенте два аяксовых объекта, один читает данные с сервера через неразорванное соединение, другой создается только в момент написания сообщения. Первый вызывает на сервере скрипт который держит коннект и читает в цикле Shared Memory и досылает данные на клиент если таковые появляются, второй вызывает скрипт который пишет данные в Shared Memory и сразу разрывает соединение. Во втором скорее всего еще и семафоры придется применить во избежании коллизий.
Третий скрипт будет пускатся crontab-ом, читать Shared Memory, писать данные в БД, очищать Shared Memory.

Поэтому тут чисто nginx наврятли подойдет. Да и чат я реализую в рамках друго проекта (не коммерческий, поэтому то и возможности лимитированы, был бы коммерческий, наверное, был бы куплен мощный дедик без ломания мозга :D ) в котором будет требоваться более интеллектуальная обработка данных чем просто чат. А чат это больше пилотный проект для оценки возможностей, хотя он так же будет использоваться.

Еще раз отдельный респект за наводку на php-fpm. На данный момент я еще только пока успел ознакомиться с документаций, но мне вариант с nginx+php-fpm нравиться все больше и больше.
 

algo

To the stars!
Использовал apache 2.2 + Event MPM + php fastcgi, OS: Gentoo Linux, Debian Linux.

Логика отработки фастцги=запросов у апача принципиально отлчается от nginx/lighttpd + fastcgi: вместо State Machine происходит чтото сильно жрущее ресурсы, особенно память.
Не уверен, с чем это связано: то ли с блокировкой fastcgi-процесса во время отдачи контента пользователю, то ли еще и с пожиранием на KeepAlive..
Инфа по этому поводу есть на fastcgi developers list, я сильно не вникал.

С php-fpm имел проблемы, впечатление такое что все чилды потихоньку дохнут ... И все, пхп не пашет.
В настоящее время использую обычный fastcgi-spawner со статическим числом процессов, т.к преимущества php-fpm не сильно актуальны, да и патчить не надо ничего.

Большинство сайтов крутятся на lighttpd + php fastcgi, один - на nginx + apache 2.2 + (perl, php fastcgi)
 

fixxxer

К.О.
Партнер клуба
>>С php-fpm имел проблемы, впечатление такое что все чилды потихоньку дохнут
а что в логах? php какой версии?
 

algo

To the stars!
fixxxer: по логам - впечатление именно такое.. Что все чилды потихоньку сдохли, а новых не родилось.
Ошибок нету.

Но глубоко проблему я не исследовал, т.к fpm для меня не критично. Рестарты очень редки, я просто на обычный FastCGI перешел.
 
Сверху