The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Утечка памяти в PHP. Возможно ли ?, !*! mikek, 14-Май-05, 18:58  [смотреть все]
В общем ситуация такая.

Есть PHP скрипт, который загружает и изменяет изображения. Изображения большие. Скрипт корректно очищает память, но после его выполнения процесс httpd начинает кушать от 20Mb до 50Mb, в зависимости от размера изображения.

Если запустить memory_get_usage в начале и конце скрипта, то значения почти совпадают.

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

Может кто сталкивался с такой проблемой и может что-то посоветовать ?

  • Утечка памяти в PHP. Возможно ли ?, !*! uldus, 08:41 , 15-Май-05 (1)
    >очищает память, но после его выполнения процесс httpd начинает кушать от
    >20Mb до 50Mb, в зависимости от размера изображения.

    Это не утечка памяти, а особенности работы с памятью mod_php. Если процесс использовал какой-то объем памяти, а потом освободил ее, то эта память физически не освобождается, а остается за процессом и будет использована в случае повторых запросов памяти. И так для каждого httpd процесса, если у тебя их 100, то рано или поздно все 100 будут занимать столько сколько по максимому запросит php скрипт в рамках каждого дочернего httpd.
    Методы лечения:
    1. Требовательные к памяти запросы выполнять не через mod_php, а через cgi-версию php.
    2. Поставить memory_limit и похоронить жрущие память скрипты (для массового хостинга подходит).
    3. Поставить MaxRequestsPerChild 1
    4. Использовать два апаче, первый, бэкенд, с mod_php и ограничением на число клиентов в 5-10, второй, легкий фронтенд, с mod_accel или на nginx вместо apache, который будет пронимать запросы от клиентов и переправлять в бэкенд.

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

    Вполне вероятно что она не освобождается, а дочерний процесс апача отмирает, после обработки MaxRequestsPerChild запросов.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру