Не увлекайтесь behavior-ами, память утекает.

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
Аватара пользователя
limion
Сообщения: 123
Зарегистрирован: 2011.08.07, 09:38
Откуда: Одесса

Не увлекайтесь behavior-ами, память утекает.

Сообщение limion »

Собственно я увлекся цеплянием поведений в методе behaviors() модели. При выводе в гриде (с учетом релейшнов и прочих подцепленных моделей) PHP сожрал всю память уже гдето на 20й строчке. Та же картина наблюдалась при импорте (XML парсер + AR). Полистав форум нарыл это замечание: viewtopic.php?f=6&t=1098#p8922
Видимо это никак никак не фиксится?
Теперь соотв-но цепляю нужные поведения в контроллере и только там где собираюсь их использовать. Так наверное правильно.
Аватара пользователя
r3verser
Сообщения: 195
Зарегистрирован: 2012.04.01, 17:29
Откуда: Киев

Re: Не увлекайтесь behavior-ами, память утекает.

Сообщение r3verser »

При выводе в гриде (с учетом релейшнов и прочих подцепленных моделей) PHP сожрал всю память уже гдето на 20й строчке.
всю память, это сколько? да, и версию php укажите.
Аватара пользователя
limion
Сообщения: 123
Зарегистрирован: 2011.08.07, 09:38
Откуда: Одесса

Re: Не увлекайтесь behavior-ами, память утекает.

Сообщение limion »

PHP Version 5.2.17
PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 45 bytes) in /home/uXXXX/YII/framework/base/CComponent.php on line 472
Последний раз редактировалось limion 2012.10.26, 12:22, всего редактировалось 1 раз.
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Не увлекайтесь behavior-ами, память утекает.

Сообщение anton44eg »

Самое простое - обновитесь до 5.3, там новый сборщик мусора. Проблема давно известна.
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Не увлекайтесь behavior-ами, память утекает.

Сообщение timlar »

И при парсинге XML юзать построитель запросов, вместо AR.
Twitter: @timlar_ua
Аватара пользователя
limion
Сообщения: 123
Зарегистрирован: 2011.08.07, 09:38
Откуда: Одесса

Re: Не увлекайтесь behavior-ами, память утекает.

Сообщение limion »

anton44eg писал(а):Самое простое - обновитесь до 5.3, там новый сборщик мусора. Проблема давно известна.
Обновиться не могу это хостер, скорее надо менять хостера, уж слишком много шишек стало валиться с мастерхоста.
Проблема как бы известна, но не так уж чтоб всем, я порылся на форуме и нашел только пару замечаний на эту тему. Вот хотелось как-то более в явном виде об этом сказать.
Аватара пользователя
limion
Сообщения: 123
Зарегистрирован: 2011.08.07, 09:38
Откуда: Одесса

Re: Не увлекайтесь behavior-ами, память утекает.

Сообщение limion »

timlar писал(а):И при парсинге XML юзать построитель запросов, вместо AR.
Это понятно, что использовать DAO лучше в даном случае чем AR. Но одно дело когда что-то ест памяти и процвремени просто больше, а совсем другое когда бесконечно больше.
Я убрал поведения и все работает как надо, всеравно парсер у меня консольный, время мне не важно, а мусор стал коллекториться нормально.
gallyamow
Сообщения: 1
Зарегистрирован: 2012.08.18, 19:17

Re: Не увлекайтесь behavior-ами, память утекает.

Сообщение gallyamow »

Здравствуйте.
Похожая же проблема, но пока без "PHP Fatal error: Allowed memory size"
Из базы выбираются все записи из таблицы. Всего их 293
В view такой код:

Код: Выделить всё

$this->widget('zii.widgets.grid.CGridView',array(
    'id'=>'main-grid',
    'dataProvider'=>$model->search(),
    'columns'=>array(
        'id',
    ),
));
В модели:

Код: Выделить всё

public function search()
{
        return new CActiveDataProvider($this, array(
            'criteria'=>new CDbCriteria(),
            'pagination'=>false,
            'sort' => array(
                'defaultOrder'=>'order_position',
            ),
        ));        
}
В итоге по данным функции memory_get_peak_usage макс. расходуется 40 мегабайт памяти.

К модели привязаны 4 behavior и 1 relation. Если убрать их то расход памяти приходит в норму, примерно 5-7 мегабайт.

PHP версии PHP/5.3.2 и включен APC.
Аватара пользователя
r3verser
Сообщения: 195
Зарегистрирован: 2012.04.01, 17:29
Откуда: Киев

Re: Не увлекайтесь behavior-ами, память утекает.

Сообщение r3verser »

Если убрать их то
1. Используете жадную загрузку?
2. Убрали только бихейворы или релейшн тоже убрали?
3. Какие бихейворы подключены?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Не увлекайтесь behavior-ами, память утекает.

Сообщение samdark »

293 записи AR да ещё и через DataProvider без постраничной разбивки — это уже много и без behavior.
Ответить