переменные-массивы в shared memory, снизить потребление памяти

13 views
Skip to first unread message

pwl...@gmail.com

unread,
Jan 12, 2008, 5:15:06 AM1/12/08
to highload-php-ru
Здравствуйте.
Я давно заметил что на одном проекте-форуме apache потребляет память
довольно интенсивно. Выяснил также что происходит это из-за большой
(но нужной ) переменной - кеш форумов. Это древовидная структура
предназначенная только для чтения с настройками каждого подфорума.
Движок переписать довольно проблематично : он покупной,большой да еще
и периодически выпускаются новые версии.

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

Таким образом, даже используя хранилища, память расходуется два раза :
получение строки и построение копии массива в каждом потомке apache.

Что можно придумать?

Я вижу это себе как функцию на C, которая клонирует массив рекурсивно
упаковывая его элементы в непрерывный блок разделяемой памяти. После в
каждом скрипте объект проецируется в адресное пространство
интерпретатора и массив волшебным образом готов к использованию.

Возможно ли это реализовать и как ? Существуют ли готовые расширения?

Александр Лозовюк

unread,
Jan 12, 2008, 5:37:31 AM1/12/08
to highloa...@googlegroups.com
ну те же акселераторы хранят в разделяемой памяти, не сериализируя массивы... можно еще мемкеш использовать или написать свой модуль для работы с шаредмемори

12.01.08, pwl...@gmail.com <pwl...@gmail.com> написал(а):



--
C уважением, Александр Лозовюк

pwl...@gmail.com

unread,
Jan 12, 2008, 6:15:26 AM1/12/08
to highload-php-ru


On 12 янв, 13:37, "Александр Лозовюк" <aleks.rai...@gmail.com> wrote:
> ну те же акселераторы хранят в разделяемой памяти, не сериализируя
> массивы... можно еще мемкеш использовать или написать свой модуль для работы
> с шаредмемори

Значит я что-то не так делаю ? А как надо?
По-моему они хранят только опкод. Ведь любая "восстановленная"
переменная может быть тут же изменена дальше по ходу программы.
В моем случае она не будет изменятся и я согласен на SEGFAULT )

И не пойму как поможет memcache? он же по tcp/ip работает. то есть
это 100% сериализация.

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

Andrei Nigmatulin

unread,
Jan 19, 2008, 4:06:37 PM1/19/08
to highloa...@googlegroups.com
On Saturday 12 January 2008 13:15, pwl...@gmail.com wrote:
> Здравствуйте.
> Я давно заметил что на одном проекте-форуме apache потребляет память
> довольно интенсивно. Выяснил также что происходит это из-за большой
> (но нужной ) переменной - кеш форумов. Это древовидная структура
> предназначенная только для чтения с настройками каждого подфорума.
> Движок переписать довольно проблематично : он покупной,большой да еще
> и периодически выпускаются новые версии.
>
> Я решил испробовать акселераторы php и их хранилища. как оказалось что
> все они или не поддерживают
> хранение массивов или переводят их в текстовый вид и сохранят.

Насколько я помню, в XCache документации было что-то про variable caching.


--
Andrei Nigmatulin
GPG PUB KEY 6449830D

Now I lay me down to sleep(3)
Pray the OS my core to keep
If I die before I wake
Pray the Disk my core to take

Vitaliy Okulov

unread,
Jan 20, 2008, 2:32:56 AM1/20/08
to highloa...@googlegroups.com
Да, есть такое. В XCache есть отдельный кеш для переменных, отдельный для php файлов.

20.01.08, Andrei Nigmatulin < andrei.n...@gmail.com> написал(а):

fixxxer

unread,
Jan 20, 2008, 8:53:42 AM1/20/08
to highload-php-ru
еще есть http://php.net/apc-store

On 20 янв, 10:32, "Vitaliy Okulov" <vitaliy.oku...@gmail.com> wrote:
> Да, есть такое. В XCache есть отдельный кеш для переменных, отдельный для
> php файлов.
>
> 20.01.08, Andrei Nigmatulin <andrei.nigmatu...@gmail.com> написал(а):

pwl...@gmail.com

unread,
Jan 25, 2008, 4:04:28 AM1/25/08
to highload-php-ru

Проблема в том, что все эти хранилища выполняют serialize() для
массивов.
То есть массив каждый раз воссоздаётся в области памяти интерпретатора
из строки получаемой из разделяемой памяти.
Идея оптимизации в том, чтобы рекурсивно запаковать все-все элементы
массива в непрерывный блок и проецировать сразу в адресное
пространство.

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

Какие тут подводные камни могут быть?


On 20 янв, 16:53, fixxxer <fixxxe...@gmail.com> wrote:
> еще естьhttp://php.net/apc-store

Andrei Nigmatulin

unread,
Jan 25, 2008, 6:56:20 AM1/25/08
to highloa...@googlegroups.com
On Friday 25 January 2008 12:04, pwl...@gmail.com wrote:
> Проблема в том, что все эти хранилища выполняют serialize() для
> массивов.
> То есть массив каждый раз воссоздаётся в области памяти интерпретатора
> из строки получаемой из разделяемой памяти.
> Идея оптимизации в том, чтобы рекурсивно запаковать все-все элементы
> массива в непрерывный блок и проецировать сразу в адресное
> пространство.
>
> Я понимаю, что это грязный хак и, возможно, будет несовместим с
> последующими версиями, но, мне кажется, он того стоит.
>
> Какие тут подводные камни могут быть?

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

Reply all
Reply to author
Forward
0 new messages