Оптимизация скрипта по использованию памяти

Tigr

Новичок
AnToXa

1. о, а нельзя сразу было так написать?
2. Я трачу свое время на эту писанину, чтобы форум не превращался в "бестолковую балабольню" ибо он мне нравиться, а не для того чтобы кого-то оскорбить.
3. Я не хамлю.
 

AnToXa

prodigy-одаренный ребенок
Tigr
2. я тоже трачу свое время на ответы, тебя никто не заставляет тратить свое время - не читай, если не хочешь.

это было вместо "спасибо"? :)))
 

mvc_aaa

MvC of PHPClub
Tigr

Я немного не понимаю твоего последнего поста.
Ты чем то недоволен ?
Или тебе не помогли ?

Замечание за _резкий тон_.

Это был твой последний ответ в этом треде.
 

Sirius

PHP+MySQL=LOVE
Всем спасибо за информацию - я обнаружил много интересного по оставленным Вами ссылкам!

2 Tronix - мой сервер izhost2.net - турецкий! Он непопулярный, но очень дешёвый, но страшен для больших проектов! Извини если обидел:)
 

Tronyх

Новичок
2 Tronix - мой сервер izhost2.net - турецкий! Он непопулярный, но очень дешёвый, но страшен для больших проектов! Извини если обидел
Да ладно не чего ;) Только мой ник Tronyx.
 

clevel

Новичок
высказывания на понимание темы. Если не прав, поправьте:
1. хостер под каждого владельца хоста создает свою копию апача.. то есть апач выступает демоном в данном случае.. он следит за тем, чтобы каждый пользователь отдельного хостера не пожирал много ресурсов(больше лимита в секунду) и в данном случае есть некий оптимизатор-кеш запросов.
2.для чата необходим еще один - под-демон, который создает в кеше последние данные и потом отсылает их многим юзерам.
3.если написан скрипт, позволяющий отображать одновременно несколько независимых виртуальных магазина, то необходим также поддемон либо создание отдельных хостеров с созданием для каждого своей копи апача.
 

AnToXa

prodigy-одаренный ребенок
ответы (надеюсь, что я ее понимаю :) )
1.1 не совсем, в апаче есть такая штука как Virtual Hosts и один демон(не один процесс!) может обслуживать несколько виртуальных серверов. Конечно можно делать отдельного апача для каждого пользователя, но это довольно неудобно с точки зрения управления конфигами(хотя это еще как посмотреть)
1.2 он не следит в обычном варианте. существуют всякие модули вроде mod_bandwidth, также есть директивы RLimitMEM, RLimitCPU (не помню из какого модуля), покоторые позволяют ограничить ресурсы.
1.3 опитимизатора(кеша) запросов опять же в std виде нет. существуют такие штуки как mod_accel и mod_proxy для кеширования и переадресации запросов.

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

3. зачем? один скрипт может показывать разные магазины в зависимости от комманд, присланных юзером (в случае http это может быть query_string или post_data)

спасибо за внимание :)
 

voodoo

Новичок
2clevel
1. нет (напр. VirtualHosts) Хотя апач в любом случае демоном выступает :)
2. нет ("необходим" вообще плохое слово, всегда есть обходные пути. чат с демоном скорее редкость, чем правило)
3. нет. (один апач, скрипты анализируют SERVER_NAME)
 

Tronyх

Новичок
Демон хранит данные у мебя в памяти и просто общает с неким внешним "раздражителем", который посылает ему комманды и данные, а демон ему отвечает.
Тут я немного не понял, вот пара вопросов:
1. Как происходит посылка запросов к демону из PHP скрипта?
2. И как этого демона "загнать" в память, что бы он от туда "не вылазил"?
 

Sirius

PHP+MySQL=LOVE
2 Clevel:
1 - Если бы так, то останавливая апач, мой чат останавливал бы только мой сайт и админам было бы пофигу - а так он останавливая апач, он останавливал ещё 50 сайтов!!!
2 - Под-демон под чат необязателен, но желателен. Особенно когда в чате более 50 человек. Каждый юзер загружает в память копию программы - ещё хуже когда при этом для каждого юзера используется база MySQL. Я считаю, что лучшего пути нет. Да - это одна из реализаций, но лучшего я пока не видел. Мощный сервер способен выдержать многие чаты. Но слабый - только с демоном.
3. Конечно нет:)

2 Tronyx - Вот обо всём этом я и хочу почитать, хоть уже и примерно представляю себе ответы на вопросы. Но пока не буду знать точно, не напишу. Наверное придётся учится на чатах chat.php.spb.ru и voodoo-chat. Просто это конкретные задачи - а я хотел знать наиболее общие возможности. Ну например написание демона под топ-лист (что я сейчас и хочу)!
 

AnToXa

prodigy-одаренный ребенок
1. Как происходит посылка запросов к демону из PHP скрипта?
таким образом, чтобы демон мог прочитать :) это могут быть сокеты, shmem и др. специфические штуки вроде пайпов или очередей.

2. И как этого демона "загнать" в память, что бы он от туда "не вылазил"?
если на пхп, то надо пхп cgi + set_time_limit(0) и бесконечный цикл внутри, что писать в цикле зависит от того, что выбрано в пункте 1, это просто ожидание данных от клиента.

плюс man daemon и почитай описания менеджера процессов и терминалы в unix
 

Tronyх

Новичок
это могут быть сокеты
Если я правильно понял, то открыть сокет к демону нужно так:
$fs=fsockopen("site.ru/daemon.php");
А затем с помощью fputs($fs, "Специальная_команда_для_демона"); доставать необходимые данные, а как демону задать эти специальные команды?

если на пхп, то надо пхп cgi
А если ПХП как модуль?

А без него ни как?
 

AnToXa

prodigy-одаренный ребенок
1. надо определиться на чем вы пишете демона
я так понял, что на пхп, тогда man daemon вам не понадобится кроме как в образовательных целях

2. демон должен __слушать__ сокет, как это сделать на пхп - это уже другой вопрос :)) (видимо это новое experimental socket extension)

3. Если пхп как модуль то вы не сможете заставить скрипт выполняться сколько угодно долго
 

Tronyх

Новичок
Если пхп как модуль то вы не сможете заставить скрипт выполняться сколько угодно долго
А если поставить set_time_limit(3000) и делать хедер локейшин на себя за пару секунд до истечения временного лимита.

демон должен __слушать__ сокет, как это сделать на пхп - это уже другой вопрос ) (видимо это новое experimental socket extension)
А чуточку подробней можно. :) Как слушать сокет?
 

AnToXa

prodigy-одаренный ребенок
А если поставить set_time_limit(3000) и делать хедер локейшин на себя за пару секунд до истечения временного лимита.
какой хедер локейшн? кому ты его собрался отдавать???

А чуточку подробней можно. Как слушать сокет?
man socket bind accept listen connect (это все функци libc, насчет пхп-врапперов смотри мануал на sockets в пхп)
 

Tronyх

Новичок
какой хедер локейшн? кому ты его собрался отдавать???
Ну да, точно ;) А если time_limit установить на очень большое число, например 3075840000 (100 лет)? И ещё вопрос, а если хостер будет устанавливать новую версию ПХП, то прийдётся заново запускать демона?
 

AnToXa

prodigy-одаренный ребенок
А если time_limit установить на очень большое число, например 3075840000 (100 лет)?
1. и как ты собрался демона запускать ?
wget http://server.com/daemon.php ? :)))))) не смешите меня
2. даже если ты сделаешь (что является безумием имхо), то пхп вылетит по таймауту запроса это раз и при каждом рестарте сервера тебе надо будет перезапускать демона - это 2
 

AnToXa

prodigy-одаренный ребенок
а как через шелл??
у тебя же пхп как модуль в апаче. как ты через шелл запустишь пхп скрипт?
 

Сенсей

Новичок
Вот здесь прицепились все к демону ... а попроще нельзя как нить?

Я о том что вот например .. есть допустим 4 разных скрипта CMS от разных авторов .... Все делают примерно одинаковые вещи .... но код у всех разный .... и допустим 2 скрипта хавают много памяти .. а 2 мало ...

Вот чисто теортически ... от чего может это зависеть?

От чистоты кода? От правильности выбора определенных функций? От от использования большого количества переменных? Констант? От размера подключаемых файлов?

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

Я говорю о самом простом .... ну вот например если я делаю :

PHP:
$var1 = "aaabbbdddcccggghhhtttjjjkkkiiuuuyyy";
$var2 = str_replace("aaa", "bbbb",  $var1);
$var3 = str_replace("ccc", "ddd",  $var2);
$var4 = str_replace("hhh", "llll",  $var3);
И того: мы создали перемнные : $var1, $var2, $var3, $var4 - следуя логике - они все занимают память ...

А если я буду делать все это с одной переменной и все время ее перезаписывать?

PHP:
$var = "aaabbbdddcccggghhhtttjjjkkkiiuuuyyy";
$var = str_replace("aaa", "bbbb",  $var);
$var = str_replace("ccc", "ddd",  $var);
$var = str_replace("hhh", "llll",  $var);
Использование памяти остенется таким же как и в первом примере или же все таки меньше?
 
Сверху