ob_ и утечка памяти

smike

Новичок
ob_ и утечка памяти

Windows NT 5.0 build 2195 Apache/1.3.34 (Win32) PHP/4.4.1

PHP:
ob_start();
//Инициализация ядра
//Подключение модуля
//Подключение шаблона
ob_end_flush();
При отработке этого скрипта объем памяти занимаемый Апачем каждый раз увеличивается,
причем неравномерно, вот некоторые замеры:
6504 Kb
6952 Kb
7148 Kb
7248 Kb
7420 Kb
7628 Kb
7832 Kb
7972 Kb
8144 Kb
8352 Kb

Если вместо ob_end_flush(); поставить ob_end_clean(); то утечка памяти прекращается.

Куда девается память?

-~{}~ 08.12.06 16:23:

Дальше еще интереснее, сохранил html-код который сгенерил скрипт как статичную странцу test.html. Так вот при открытии этой статичной страницы утечка памяти продолжается!!! При открытии других статичных страниц утечки памяти нет. Кто нибуть сталкивался с подобным?
 

WP

^_^
> html-код который сгенерил скрипт как статичную странцу test.html.
Вот это уже бред, если конечно страничка не заставляет броузер общаться к скрипту.

По поводу куда девается память тоже очень сомнительно.
А если поставить
PHP:
$a = ob_get_contents();
ob_end_clean();
echo $a;
?
 

smike

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

PHP:
$a = ob_get_contents();
ob_end_clean();
echo $a;
Пробовал, не помогает.

-~{}~ 08.12.06 22:37:

Поставил то же Apache и php под WinXP Pro SP2. Статичные страницы память жрать перестали. Но скрипт с ob_end_flush() память жрать продолжает. С ob_end_clean() не жрет.

Допустим со статичной страницей под Win2k был какой-то глюк, но почему под XP с ob_end_flush() память жрет а с ob_end_clean() нет? Причем жрет как-то странно, неравномерно то мегабайт откусит то два то вобще ничего. Если бы утечка памяти была бы в скрипте то по идее отжирать должно и с ob_end_clean() и с ob_end_flush(), причем одинаковый кусок, а тут черт знает что с памятью происходит...


-~{}~ 09.12.06 03:17:

Еще так пробовал:
PHP:
$text=ob_get_contents();
ob_end_clean();
echo $text;
unset($text);
Все равно жрет память почему-то...
 

hermit_refined

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

smike

Новичок
во-первых, насколько это все критично? речь идет о тестовом сервере?..
У хостера возникли проблемы с моим скриптом на одном из серверов. При переходе на некоторые страницы скрипт вываливался с ошибкой 500 и создавался php-cgi.core. При переносе на другой сервер того же хостера ошибка исчезла.
Хостер все же настаивает что ошибка в моем скрипте, указывая на то что на первом сервере у них "стоит ограничение по чрезмерному потеблению ресурсов - вы на него наткнулись".
Я сделал замеры памяти в различных точках скрипта с помощью memory_get_usage(). Проверка показала что скрипт нигде не использует более 2М оперативки. После этого решил посмотреть потребление памяти Апачем на локальной машине, и наткнулся на такую вот непонятную фигню. Все вышеперечисленное Вами пробовал, в ходе экперементов поставил джумлу и написал такой скрипт
PHP:
echo file_get_contents('http://localhost/demo/joomla/');
Утечка памяти есть. Если просто открыть http://localhost/demo/joomla/ то утечки нет. Пока пришел к выводу что это какой-то странный редкий глюк виндового Апача. На днях попробую потестить все это под FreeBSD.

ЗЫ: Память Апача растет примерно до 25М потом останавливаетя, скрипт при этом отрабатывает нормально
 

SiMM

Новичок
А зачем грузить файл, расположенный на локальной машине, через апач?
 
Сверху