Сколько памяти мне нужно для общей среды разработки Magento? - PullRequest
0 голосов
/ 25 января 2012

Мы используем общий сервер (на RackSpace) для разработки Magento. У каждого разработчика своя песочница, но PHP memory_limit = 512M, и когда я пытаюсь проверить некоторые объекты [с Mage::log($someBigArray)], я получаю сбои, и Apache регистрирует это:

[Mon Jan 23 15:47:35 2012] [error] [client 208.247.73.130] PHP Fatal error:  Allowed memory size of 268435456 bytes exhausted (tried to allocate 228065281 bytes) in /home/msmith/projects/ref/app/Mage.php on line 761, referer: http://ref.msmith.mage.example.com/checkout/cart/

Мой босс хочет увеличить объем памяти, чтобы мы могли вести такую ​​регистрацию. В настоящее время у нас всего три разработчика, но мы хотим иметь возможность увеличить их до 15. Какой объем памяти можно было бы установить для memory_limit в php.ini для поддержки такого количества разработчиков на общем сервере?

Ответы [ 2 ]

1 голос
/ 25 января 2012
  1. Столько, сколько вы можете, хотя 15 разработчиков не так много, если учесть объем трафика, который вы будете приносить в свой магазин после запуска

  2. Вся память в мире не исправит вашу ошибку Allowed memory size of 268435456 bytes exhausted. Эти ошибки возникают, когда PHP встречает циклические рекурсивные ссылки между объектами и продолжает помещать бесконечные строковые представления в память. У Magento есть много таких циркулярных ссылок.

0 голосов
/ 24 апреля 2013

Вы еще не используете 512 МБ - обратите внимание на допустимый объем памяти, указанный в журнале ошибок. В дополнение к PHP.ini, Magento устанавливает ограничение памяти в нескольких местах, по крайней мере, в моем дистрибутиве (образ BitNami в Linux).

В htdocs у меня есть .htaccess с:

############################################
## adjust memory limit

#    php_value memory_limit 64M
    php_value memory_limit 256M
    php_value max_execution_time 18000

Это влияет на большую часть приложения. В коде также есть несколько мест с

    @set_time_limit(0);
    @ini_set('memory_limit', '256M');

Вы можете grep для них.

Если большой массив, который вы хотите выгрузить в журнал, это Varien_Object, вы можете попытаться вывести его так:

    Mage::log(
        "My object: " .
        print_r($object->debug(),true),
        null,
        'MyLogfile.log'
    );

Метод отладки останавливает бесконечную рекурсию, но это будет работать только для подклассов Varien_Object. К счастью, многие объекты в Magento являются производными от Varien_Object.

...