PHP Fatal error Allowed memory size exhausted во время установки Magento2

Очень частов во время установки Magento 2 (используя php bin/magento setup:install) появляется ошибка: «PHP Fatal error: Allowed memory size of NNN bytes exhausted». Эта ошибка значит, что вашему скрипту на хостинге или локальном компьютере не хватает памяти для корректной работы.

Allowed memory size exhausted

Полный текст ошибки и php stack trace:

$ php bin/magento setup:install --admin-firstname name \
 --admin-lastname lastname --admin-email=email@email.com
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 5 bytes)
 in magento2/vendor/magento/zendframework1/library/Zend/Db/Statement/Pdo.php
on line 228

PHP Stack trace:

PHP   1. {main}() magento2/bin/magento:0
PHP   2. Symfony\Component\Console\Application->run() magento2/bin/magento:25
PHP   3. Magento\Framework\Console\Cli->doRun() magento2/vendor/symfony/console/Symfony/Component/Console/Application.php:126
PHP   4. Symfony\Component\Console\Application->doRun() magento2/vendor/magento/framework/Console/Cli.php:49
PHP   5. Symfony\Component\Console\Application->doRunCommand() magento2/vendor/symfony/console/Symfony/Component/Console/Application.php:195
PHP   6. Symfony\Component\Console\Command\Command->run() magento2/vendor/symfony/console/Symfony/Component/Console/Application.php:874
PHP   7. Magento\Setup\Console\Command\InstallCommand->execute() magento2/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:257
PHP   8. Magento\Setup\Model\Installer->install() magento2/setup/src/Magento/Setup/Console/Command/InstallCommand.php:125
PHP   9. call_user_func_array:{magento2/setup/src/Magento/Setup/Model/Installer.php:331}() magento2/setup/src/Magento/Setup/Model/Installer.php:331
PHP  10. Magento\Setup\Model\Installer->installDataFixtures() magento2/setup/src/Magento/Setup/Model/Installer.php:331
PHP  11. Magento\Setup\Model\Installer->handleDBSchemaData() magento2/setup/src/Magento/Setup/Model/Installer.php:746
PHP  12. Magento\ConfigurableSampleData\Setup\InstallData->install() magento2/setup/src/Magento/Setup/Model/Installer.php:798
PHP  13. Magento\Framework\Setup\SampleData\Executor->exec() magento2/vendor/magento/module-configurable-sample-data/Setup/InstallData.php:33
PHP  14. Magento\Framework\App\State->emulateAreaCode() magento2/vendor/magento/framework/Setup/SampleData/Executor.php:50
PHP  15. call_user_func_array:{magento2/vendor/magento/framework/App/State.php:171}() magento2/vendor/magento/framework/App/State.php:171
PHP  16. Magento\ConfigurableSampleData\Setup\Installer->install() magento2/vendor/magento/framework/App/State.php:171
PHP  17. Magento\ConfigurableSampleData\Model\Product->install() magento2/vendor/magento/module-configurable-sample-data/Setup/Installer.php:57
PHP  18. Magento\ImportExport\Model\Import\Interceptor->importSource() magento2/vendor/magento/module-configurable-sample-data/Model/Product.php:96
PHP  19. Magento\ImportExport\Model\Import\Interceptor->___callPlugins() magento2/var/generation/Magento/ImportExport/Model/Import/Interceptor.php:104
PHP  20. call_user_func_array:{magento2/vendor/magento/framework/Interception/Interceptor.php:144}() magento2/vendor/magento/framework/Interception/Interceptor.php:144
PHP  21. Magento\ImportExport\Model\Import->importSource() magento2/vendor/magento/framework/Interception/Interceptor.php:144
PHP  22. Magento\ImportExport\Model\Import->processImport() magento2/vendor/magento/module-import-export/Model/Import.php:413
PHP  23. Magento\ImportExport\Model\Import\Entity\AbstractEntity->importData() magento2/vendor/magento/module-import-export/Model/Import.php:448
PHP  24. Magento\CatalogImportExport\Model\Import\Product->_importData() magento2/vendor/magento/module-import-export/Model/Import/Entity/AbstractEntity.php:578
PHP  25. Magento\CatalogImportExport\Model\Import\Product->_saveProductsData() magento2/vendor/magento/module-catalog-import-export/Model/Import/Product.php:844
PHP  26. Magento\CatalogImportExport\Model\Import\Product->_saveProducts() magento2/vendor/magento/module-catalog-import-export/Model/Import/Product.php:876
PHP  27. Magento\CatalogImportExport\Model\Import\Product->_saveProductAttributes() magento2/vendor/magento/module-catalog-import-export/Model/Import/Product.php:1613
PHP  28. Magento\Framework\DB\Adapter\Pdo\Mysql->insertOnDuplicate() magento2/vendor/magento/module-catalog-import-export/Model/Import/Product.php:1160
PHP  29. Magento\Framework\DB\Adapter\Pdo\Mysql->query() magento2/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php:1842
PHP  30. Magento\Framework\DB\Adapter\Pdo\Mysql->_query() magento2/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php:499
PHP  31. Zend_Db_Adapter_Pdo_Abstract->query() magento2/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php:444
PHP  32. Zend_Db_Adapter_Abstract->query() magento2/vendor/magento/zendframework1/library/Zend/Db/Adapter/Pdo/Abstract.php:238
PHP  33. Zend_Db_Statement->execute() magento2/vendor/magento/zendframework1/library/Zend/Db/Adapter/Abstract.php:480
PHP  34. Magento\Framework\DB\Statement\Pdo\Mysql->_execute() magento2/vendor/magento/zendframework1/library/Zend/Db/Statement.php:303
PHP  35. Zend_Db_Statement_Pdo->_execute() magento2/vendor/magento/framework/DB/Statement/Pdo/Mysql.php:95
PHP  36. PDOStatement->execute() magento2/vendor/magento/zendframework1/library/Zend/Db/Statement/Pdo.php:228

[свернуть]

По умолчанию Magento 2 устанавливает лимит использования памяти в 256мб в magento2/pub/.htaccess:

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

    php_value memory_limit 256M
    php_value max_execution_time 18000

Поэтому лучше всего иметь 256мб в настройках PHP.

Решение:

1) Изменить php.ini для увеличения параметра memory_limit на глобальном уровне
Для нахождения php.ini можено использовать команду «php —ini» из консоли

...
; How many GET/POST/COOKIE input variables may be accepted
; max_input_vars = 1000

; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 256M
...

2) Также можно изменить данный параметр локально только для magento2 скрипта:
Добавить ini_set(«memory_limit»,»256M») в «magento2/bin/magento» файл

#!/usr/bin/env php
<?php
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
ini_set('memory_limit', '256M');
use Magento\Framework\AppInterface;
if (PHP_SAPI !== 'cli') {
    echo 'bin/magento must be run as a CLI application';
    exit(1);
}

3) Также можно изменить memory_limit только для этого вызова php

php -dmemory_limit=1G bin/magento setup:install 

Как проверить текущее значение memory_limit:

1) Выполнить комманду:

php -r "echo ini_get('memory_limit').PHP_EOL;"

2) Или выполнить следующую команду:

php -i | grep memory

Это выведет, что-то такое:

$ php -i | grep memory
memory_limit => 128M => 128M
Collecting memory statistics => Yes

3) Создать php файла phpinfo.php и добавить следующий код:

<?php phpinfo(); ?>

Текст данной статьи на английском Magento 2 installation: PHP Fatal error Allowed memory size exhausted

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *