Как уменьшить выделяемую память для PHP скриптов?

radiante

Новичок
Linux 2.6.32 + PHP Version 5.3.3-7+squeeze3

Когда пользователь заходит на php-страницу, то сервер выделяет оперативную память для выполнения php скрипта. А есть на страницу одновременно зашло 100 тыс человек, то сервер выделит 100000 * объем под один скрипт? если да можно настроить чтобы выделялась только память под данные, а под бинарный php-код выделялась оперативка только один раз ? если нельзя, то хотя бы как уменьшить объем памяти под каждую копию одного и того же выполняемого php скрипта?
 

fixxxer

К.О.
Партнер клуба
ну для начала установи акселератор. рекомендую, кстати, вот этот форк eAccelerator
https://github.com/tony2001/eaccelerator/

общая shared memory акселератора будет и в mod-php, и в php-fpm

ну а в целом как я понимаю копии неизбежны, разве что самому форкаться
 

radiante

Новичок
ну для начала установи акселератор. рекомендую, кстати, вот этот форк eAccelerator
https://github.com/tony2001/eaccelerator/

общая shared memory акселератора будет и в mod-php, и в php-fpm
спасибо, поразбираюсь!
а отчего зависит будет ли под очередную копию того же выделяться отдельная память или бинарник будет исполняться из уже загруженного ранее кода в памяти? (Files that can't fit in shared memory are cached on disk only.)
может есть советы как не допустить ошибок и как проверить из какой памяти (общей или нет) выполняется скрипт?

прошу всех кидать сюда еще варианты, modы, их различия и может решения от самого php ?
 

MiksIr

miksir@home:~$
Форки в линуксе "copy on write", т.е. реальное копирование данных происходит не на форке, а на записи. Плюс, каждый бинарь тянет за собой кучу библиотек, которые шарятся - это все на уровне ОС. Но вообще даже это все не важно. Ибо вопрос "как ограничить" - очень просто: у апача (я правильно понимаю, что речь о mod_php?) есть директива MaxClients - больше этого числа одновременных соединений апач не установит, а значит и больше процессов не родит. Правда, это включает в себя все соединения - и для отдачи картинки и для запуска скрипта: именно по-этому перед апачем ставят легкий проксирующий веб-сервер типа nginx - он отдает все картинки и прочую статику сам, а апачу передает запросы для пхп - и тут уже будет прямая зависимость MaxClients -- число процессов.
 

radiante

Новичок
Понимаю, все зависит от конкретной задачи, вот вкратце: Несколько простых небольших php скриптов + mysql , но большое кол-во одновременных запросов к страницам от пользователей через серверные редиректы на php скрипты. большая БД, чтение по индексам = 95% от всех запросов, запись/обновление базы = 5%.

Вот что я выбрал, прошу кидайте коменты, ниже написал два вопроса.
А шняги типа eAccelerator+php, apache+php_mod, php-fpm и т.п. решения просто отсасывают по всем тестам)

Оптимизация.

1. использовать php транслятор HipHop, он же кеширует байткод.
2. кешировать обращения к MySQL, использую Memcached.
3. кешировать статику и динамически создаваемые скриптами html страницы, используя Squid или лучше Varnis.
4. разделение статики и динамики, под первое юзать lighttpd или nginx на отдельном ip или поддомене, для второго web-сервер HipHop.

Получается например такая связка: Linux+lighttpd+Varnis+HipHop+Mysql

Масштабируемость. кластеризация БД - поддержка нескольких датацентров и возможность добавления новых машин в работающий кластер прозрачно для ваших приложений. (MySQL для этого не особо годиться - http://www.linuxshare.ru/docs/mysql/nocluster.html). но можно использовать Cassandra или Riak.

Стабильность. Про утечки памяти на такой системе кто что может сказать?

Вопросы:

1. как сделать редиректы на php страницы (например с /dir/page1234 на page.php?n=1234 ) ? не понимаю механизма т.к. при использовании
lighttpd+hiphop или nginx+hiphop получается два web-сервера, какой надо настраивать чтобы сделать редирект на php страницы? на lighttpd в
url.rewrite-once = что то типа этого "^/dir/(\d+)/?$" => "page.phpn=$1" , но есть надо настраивать через сервер hiphop то как?

2. как работает Memcached, Squid, Varnis если под сайт отведены несколько физических серверов? из оперативки или жесткого диска какого сервера будет браться кеш? можно ли то сделать прозрачно?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
расшифруй значение слов "большое кол-во одновременных запросов"
большое - это сколько - сто тысяч?
что значит "одновременных"? речь о пиках посещаемости или о большом времени обработки каждого запроса?

сколько запросов в сутки сайт обслуживает сегодня?

что такое "серверные редиректы"?

короче, хочешь помощи - пиши числа и точные технические термины
 

MiksIr

miksir@home:~$
Поржал =))
Выбрал себе самолет. Всякие A320 и B-737 отсасывают.
F-22, двигатель 15876 кгс, максимальная скорость 2100 км/ч, антирадарное покрытие.
Вопросы: а где дырка, что бы керосин заливать?

=)
 

radiante

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

сколько запросов в сутки сайт обслуживает сегодня?

что такое "серверные редиректы"?

короче, хочешь помощи - пиши числа и точные технические термины
большое кол-во одновременных запросов. сейчас нужно собрать систему для стабильной быстрой работы для сайта с пиком открытых соединений 100 тыс (заходы на php страницы).

серверные редиректы. - описал в вопросе 1 там же.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Каких еще открытых соединений?
 

radiante

Новичок
Поржал =))
Выбрал себе самолет. Всякие A320 и B-737 отсасывают.
F-22, двигатель 15876 кгс, максимальная скорость 2100 км/ч, антирадарное покрытие.
Вопросы: а где дырка, что бы керосин заливать?

=)
а че не так?) зачем нужен большой неповоротливый апач, если всем давно очевидно чтобы самые быстрые web серверы это lighttpd или nginx. да там меньше наворотов, но если они не нужны какой в апаче смысл? так же средний выйгрыш в производительности hiphop по сравнению с php+акселератор в 2 раза. И не надо тут ничего выдумывать, все уже выдумали за нас умные люди при оптимизации больших проектов типа facebook, и если кто то думает что там ничего не понимают в оптимизации и зря юзают hiphop, думаю что вы наверняка ошибаетесь.
 

MiksIr

miksir@home:~$
а че не так?) зачем нужен большой неповоротливый апач, если всем давно очевидно чтобы самые быстрые web серверы это lighttpd или nginx. да там меньше наворотов, но если они не нужны какой в апаче смысл? так же средний выйгрыш в производительности hiphop по сравнению с php+акселератор в 2 раза. И не надо тут ничего выдумывать, все уже выдумали за нас умные люди при оптимизации больших проектов типа facebook, и если кто то думает что там ничего не понимают в оптимизации и зря юзают hiphop, думаю что вы наверняка ошибаетесь.
Там то понимают все в оптимизации. А тут вот - не очень. Люди, которые создают системы под 100-300 тыс хитов в секунду как минимум научились находить всю необходимую информацию сами, а так же при отсутствии такой информации - придумывать самим решения основываясь на ранее созданных более простых проектах. А пока вы выглядите как тот вот автор про кластер в мускуле - человек, которому показали кучу блестящих игрушек и он хочет их обязательно присрать к своему ведру.
Сравнивать hiphop и php+eaccelerator глупо изначально. Это все-равно, что сравнивать php и с++. Разные задачи и цели. Тот же фейсбук не использует компиляцию везде и повсюду, а прикрывает отдельные места критичные именно к вычислительной производительности кода.
В общем вывод - не забивайте себе голову, начните с малого и решайте задачи по мере их появления. И если вдруг случится чудо и вы действительно получите свои 100 тыс. - к тому времени уже будете образованы и сможете сами отличить глупые статьи (типа ссылки про мускуль кластер) от полезной информации.
 

MiksIr

miksir@home:~$
ЗЫ: нормальные приложения сами парсят урлы как им надо, а не покрываются сверху кучей костылей типа "серверных редиректов".
 

radiante

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

А сравнивать hiphop и php+eaccelerator надо! Ибо назначение у них одинаковое, чего нельзя сказать о производительности.

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

MiksIr

miksir@home:~$
А сравнивать hiphop и php+eaccelerator надо! Ибо назначение у них одинаковое, чего нельзя сказать о производительности.
Нет. Более того, производительность hiphop зависит от того, как написан исходный код. В некоторых случаях это дает прирост, в некоторых - вообще никого прироста не дает. Отсюда вывод - для использования его нужно изначально код писать близкий по стилю к c++. Ясно дело, проблемы с поддержкой расширений. И запомните такую вещь - ускорение на 50% участка который занимает лишь 10% времени запроса даст 5% прирост производительности. У тебя уже есть информация, на какие части кода будет приходится какая нагрузка? Или думаешь, что hiphop ускорит время выполнения системных сисколов для работы с файлами или скорость обмена данных с базой? И вообще, как человек выбирающий архитектуру, ответь на простой вопрос - сколько success story на hiphop ты знаешь, не считая фейсбука, который делал это под свои конкретные задачи.
А начинать с малого нет смысла, если проект изначально расчитан на очень большую аудиторию, точнее сейчас идет выбор связки для создания стабильной производительной системы которую сразу можно будет включить на сайт с большой нагрузкой и в последствии прозрачно масштабировать.
Все так говорят. И лишь 0.001% достигает действительно большой нагрузки. А даже если и достигает - то находит свои, часто специфические решения по оптимизации. Находит человек, который перерыл весь интернет, знает как работает та или иная технология и видит, что конкретно в данной ситуации данное узкое место можно ускорить таким вот решеним. А не бросается на красивые цифры бенчмарков не понимая - откуда они берутся, для чего и в каких условиях. Но если уж очень хочется сразу под нагузки - пишите сразу на с++, чего уж тут.
 

radiante

Новичок
1. сейчас весь код переписывается, так что самое время делать это под конкретные нужны, т.е. как и ты написал конкретно под hiphop, какие части кода под нагрузкой знаю, именно поэтому в данной ситуации инновации приветствуются, даже если только один facebook их использует!
2. переписывать будут на php, не знают с++ мои люди, других нельзя нанять из соображений безопасности...так что это не трогаем)
3. а при чем тут твоя фраза Или думаешь, что hiphop ускорит время выполнения системных сисколов для работы с файлами или скорость обмена данных с базой? - БД та тут причем))) hiphop для другого используется, думаю это понятно из того что я написал выше.
4. если я говорю что нагрузка есть, принимайте это на веру, здесь обсуждаются технические решения, я не успех в бизнесе, ты бы еще написал, что мой проект вряд ли принесет прибыль, даже не зная что он из себя представляет)
 

MiksIr

miksir@home:~$
переписывать будут на php, не знают с++ мои люди, других нельзя нанять из соображений безопасности...так что это не трогаем)
И как они будут переписывать под hiphop не зная с++, тогда как hiphop является транслятором php в c++?
БД та тут причем))) hiphop для другого используется, думаю это понятно из того что я написал выше
Действительно, причем тут БД:
все зависит от конкретной задачи, вот вкратце: Несколько простых небольших php скриптов + mysql , но большое кол-во одновременных запросов к страницам от пользователей через серверные редиректы на php скрипты. большая БД, чтение по индексам = 95% от всех запросов, запись/обновление базы = 5%.
если я говорю что нагрузка есть, принимайте это на веру, здесь обсуждаются технические решения, я не успех в бизнесе
Здесь не обсуждаются технические решения. Здесь вы сыпите названиями технологий натыренных в гугле из разных бложиков даже не зная как они работают. А вам пытаются сказать, что рано пускаться в большое плавание не научившись плавать в бассейне. Ответы на все ваши вопросы получаются при первом ознакомлении с той или иной технологией (т.е. чтение описания, документации и примеров использования).
 

radiante

Новичок
да я не собираюсь копать все нюансы каждой технологии, я не админ, но в одном я точно не согласен, на практике очень часто я просто ставил какую то интересную технологию не понимая всех ее нюансов и в результате общая производительность вырастала вдвое, без появления доп.сбоев или ошибок, а мне только это и надо было, а с наемными админами очень часто бывает что хоть они и лучше понимают как работает технология, но просто молчат, забывают или забивают) и когда ты им говоришь а если вот это поставить, они отвечают: "да, можно, если правильно настроить будет лучше", и ставя ее за меня скорость вырастает не в 2 а в 4 раза, но если бы я не предложил, так бы все и осталось как было, вот в чем весь казус...
 

MiksIr

miksir@home:~$
А можно примеры таких успешно внедренных технологий, которые вам скорость в 2-4 раза выросло.
 

Lirik

Новичок
ТС начитался кучу статей по оптимизации и пишет свой блог, который по его мнению будут посещать over9000 уников?:D
 
Сверху