Процесс php-cgi жрет память более отведенного лимита

  • Автор темы Автор темы mfl
  • Дата начала Дата начала

mfl

Новичок
Процесс php-cgi жрет память более отведенного лимита

Скрипт запускается по cron.
В результате работы скрипта, процесс php-cgi который обрабатывает данный скрипт, постепенно увеливиает обьем потребляемой памяти. При поглощении всей свободной памяти, процесс прерывается.
В php.ini установлено memory_limit = 32M, но память потребляемая процессом превышает это ограничение почти в 10 раз

Скрипт работает порядка 6 часов (~ 200 секунд процессорного времени), за это время процесс php-cgi с ~10мб возрастает до ~300мб и прерывается, в связи с поглощением всей свободной памяти.

С переодичностью в 900 секунд проверялась память в самом скрипте:
Значения параметров
memory_get_usage() колебалось в пределах 524996 - 650544
memory_get_usage(true) колебалось в пределах 1572864 - 2359296
При этом значения не менялись по возрастающей, последующие значения могли быть как больше так и меньше текущих.

Командой top отслеживалась потребляемая процессом php-cgi память.
Наблюдалось постепенное увеличение потребляемой процессом памяти, которое заканчивалось поглащением всей свободной оперативной памяти (~300mb)

Почему сам процесс php-cgi так поглащает оперативную память? Как это можно исправить?

Спасибо.
 
это нормально. для начало не мешало бы включить отображение ошибок и уровень хотя бы E_ALL, дальше нужно смотреть код, особенно разные системные выховы
 
AmdY, спасибо за ответ.
Сейчас буду смотреть ошибки.
А почему это нормально? Разьве процесс не должен прерываться при достижении 32 mb?

-~{}~ 28.02.09 21:18:

В общем запускал скрипт с отображением всех ошибок.
Ни одной ошибки зафиксировано не было. Даже ни одного NOTICE

В чем еще может быть пречина?
 
где написано, что memory_limit имеет отношение к операционной системе и кол-ве выделенной настоящей вирутальной памяти? Это сам пхп решает, вылез ли скрипт за этот размер.
 
странно: ты можешь "Наблюдать постепенное увеличение потребляемой процессом памяти", т.е. про дебаг ты знаешь,
но задаешь вопрос, для ответа на который нужна телепатия, хотя поможет только детальный нудный дебаг
 
mfl
Из серии "хорошо бы проверить": а в самом скрипте лимит точно не устанавливается?
 
korchasa, нет лемит точно не устанавливается.

Так по данным memory_get_usage скрипт и не поглащает более лемита, описано в первом посте.
Я просто не могу понять, почему процесс жрет столько памяти.
 
потребление памяти скриптом и процессом php -- это две большие разницы.

второе ограничивают средстами ОС (man setrlimit).
 
tashkentchi, да это именно php-cgi. В принципе и нет разницы как запускать скрипт, по крону, через командную строку, или через через браузер. Результат один и тот же.

fixxxer, спасибо за ответ, теперь уже знаю.

-~{}~ 01.03.09 18:24:

Короче, нашел причину. Все дело в функции strtotime. Без преобразовавыния даты, процесс не увеличивает размер потребляемой памяти.
Для того, чтобы на 100% убедиться в своих выводах, запустил скриптик
PHP:
<?php
while(true) { $t = strtotime('03.02.2009, 01:04'); }
?>
Процесс занял всю свободную память (300 мб) практически за 20 сек. и завершился.

Теперь надо думать, как это можно исправить.

-~{}~ 01.03.09 18:35:

Да собственно, все понятно. Стоял PHP v 5.2.8

Нашел информацию по PHP v 5.2.9
...
Исправлена ошибка #46889 (Утечки памяти в strtotime())

Всем спасибо за помощь.
 
Автор оригинала: grigori
korchasa
предлагаешь перейти на ассемблер?
...
много-много холивара
...

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

Откуда можно вырвать справочник функций PHP с параметрами, в каком-то более-менее легком для разбора виде?
 
Да еще бы, просто в реальном мире всегда есть вопрос выбора.
У какой web-ориентированной платформы точно нет проблем с памятью, гибкостью, универсальностью и потреблением ресурсов? C#/Java/ROR/Python/Perl ? Нет таких, а жить надо сегодня.
"И на солнце бывают пятна" (С)

>Откуда можно вырвать справочник функций PHP с параметрами, в каком-то более-менее легком для разбора виде?

В Зенд-студии есть файлы функций с описаниями для автокомплита.
 
Сверху