PHP Fatal error: Out of memory

Tamagoch

Новичок
PHP Fatal error: Out of memory

на версиях PHP 5.2.0, 5.2.1-dev регулярно вываливается такая ошибка:

PHP Fatal error: Out of memory (allocated 1572864) (tried to allocate 393216 bytes) in ...\\forum\\sources\\classes\\class_session.php on line 584
более простые скрипты все еще работают, но форумы, к примеру, нет :(

это происходит когда процесс httpd.exe достигает определенного размера в памяти - достаточно большого размера, около 200 Мбайт, при чем уменьшаться никак не хочет, а только увеличивается...

все это пытается работать под Apache 2.2.3 (php5apache2_2.dll) и Win XP SP2

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

сейчас пробую PHP 5.2.2-dev, но уверен, что ничего не поменялось :(

так же ищу альтернативные варианты решения проблемы, кроме самых радикальных - переходить на другую ОС, например, пока совсем нет времени
 

tony2001

TeaM PHPClub
Писать скрипты так, чтобы они не требовали 200Мб памяти для работы, либо увеличивать memory_limit.
Первое, конечно, предпочтительнее.
 

Tamagoch

Новичок
Автор оригинала: tony2001
Писать скрипты так, чтобы они не требовали 200Мб памяти для работы, либо увеличивать memory_limit.
Первое, конечно, предпочтительнее.
вы скажете это разработчикам IPB например? :cool:

мои-то скрипты работают, да и форумные вряд ли съедают за раз 200М
я еще раз повторюсь - объем памяти накапливается в процессе работы
скрипты может и кушают 300-400К, они просто потом их не освобождают - вот в чем грабли
и после пары сотен запусков скрипта он больше не хочет работать...
 

magic

lancer
Out of memory (allocated 1572864) (tried to allocate 393216 bytes)
...либо увеличивать memory_limit.
php.ini:
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

max_execution_time = 30 ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
memory_limit = 64M ; Maximum amount of memory a script may consume (8MB)
Сечешь?
 

tony2001

TeaM PHPClub
>вы скажете это разработчикам IPB например?

а что такого?
они святые, что-ли?

>я еще раз повторюсь - объем памяти накапливается в процессе работы

works just fine here.
 

Tamagoch

Новичок
увеличение memory_limit не помогло - просто форум дольше продержался до появления этой ошибки

вижу два пути на ближайшее время:

1. обновить Апач до 2.2.4
2. отказаться от использование модуля и настроить PHP как CGI

что лучше? :)
 

phprus

Moderator
Команда форума
Tamagoch
Обнови апач и сообщи о баге разработчикам IPB.
 

Tamagoch

Новичок
Tamagoch
Обнови апач и сообщи о баге разработчикам IPB.
но PHP тут точно ни при чем :D

Ошибка приложения httpd.exe, версия 2.2.3.0, модуль php5ts.dll, версия 5.2.1.1, адрес 0x00009ee1.
вот эта ошибка приводит к выгрузке одного из процессов httpd.exe и освобождению оперативной памяти

я все-таки склонен обращаться к разработчикам PHP, но пока еще не все попробовал, не буду...
 

modulator

Новичок
Re: PHP Fatal error: Out of memory

Автор оригинала: Tamagoch
на версиях PHP 5.2.0, 5.2.1-dev регулярно вываливается такая ошибка:

более простые скрипты все еще работают, но форумы, к примеру, нет :(

это происходит когда процесс httpd.exe достигает определенного размера в памяти - достаточно большого размера, около 200 Мбайт, при чем уменьшаться никак не хочет, а только увеличивается...

все это пытается работать под Apache 2.2.3 (php5apache2_2.dll) и Win XP SP2

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

сейчас пробую PHP 5.2.2-dev, но уверен, что ничего не поменялось :(

так же ищу альтернативные варианты решения проблемы, кроме самых радикальных - переходить на другую ОС, например, пока совсем нет времени
Это проблема не PHP и не Bug PHP!
Всё дело кроется в самом Apache 2.x.x, разработчики второго Апача довольно плохо заточили его по Windows. На Linux системах со вторым Апачем такого глюка не было бы.

Чтобы у тебя хватало памяти для PHP сценариев надо из конфигурационного файла Апачи (httpd.conf) убрать (закомментировать) строки:
EnableMMAP off
EnableSendfile off
Win32DisableAcceptEx On

После этого памяти начнёт хватать, но начнутся тормоза при работе с сайтом (возможно не очень сильные). Проблема будет в том что в файле ошибок Апача (error.log ) почти ежесекундно будет появляться строка "[warn] (OS 64)The specified network name is no longer available. : winnt_accept: Asynchronous AcceptEx failed." и через сутки он у тебя будет бооольших размеров.

Это проблема модуля “mpm_winnt_module” второго Апача который некорректно работает с функцией AcceptEx() на системах Windows (ну или что вроде того).
Короче связку Apache 2.x.x + PHP 5/4 на системах Windows ты не заставишь нормально работать, особенно набольших веб-проектах.

Я прошел через такую-же проблему и нашел единственный выход, надо поставить Апаче первой версии. Я лично поставил Apache 1.3.37 и больше с этой проблемой не сталкивался…….
 

Tamagoch

Новичок
Re: Re: PHP Fatal error: Out of memory

Автор оригинала: modulator
Это проблема не PHP и не Bug PHP!
да я уже сам понял, что тут Апач скорее всего и виноват....
AcceptEx и все остальное отключил давно - потому что вообще файлы не отдавались :)
а про линукс думал еще до появления этой проблемы, просто нет свободной машины пока...

спасибо за ответ, убедился в правильности своих предположений ;)
 
Сверху