Magento 2.2.2: tamaño de memoria permitido de 792723456 bytes agotados (intentó asignar 184320 bytes)


11

Estoy trabajando en magento 2.2.2 y cuando guardo el producto, aparecerá este error.

Error fatal: tamaño de memoria permitido de 792723456 bytes agotados (intentó asignar 184320 bytes) en /var/www/html/Demo/vendor/magento/framework/Profiler.php en la línea 153

Php version : 7.0

Magento : 2.2.2

También me aplico cambios en memory_limit = 16Gen el php.iniarchivo y reiniciar Apache servidor. Aún así, este problema no se solucionó.

<?php
namespace Abc\Xyz\Observer;

use Magento\Framework\Event\ObserverInterface;
use \Magento\Store\Model\StoreManagerInterface;

class ProductSaveAfter implements ObserverInterface
{
    protected $_objectManager;
    protected $messageManager;
    protected $_productmFactory;
    protected $_productdFactory;
    protected $_productsFactory;
    protected $_eavConfig;
    protected $sStore;
    protected $scopeConfig;
    protected $_helper;
    protected $storeManager;

    public function __construct(
        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
        \Magento\Framework\ObjectManagerInterface $objectManager,
        \Magento\Framework\App\RequestInterface $request,
        \Magento\Eav\Model\Config $eavConfig,
        \Abc\Xyz\Helper\Data $helper,
        StoreManagerInterface $storeManager,
        \Abc\Xyz\Model\productmFactory $productmFactory,
        \Abc\Xyz\Model\ProductdFactory $ProductdFactory,
        \Abc\Xyz\Model\productsFactory $productsFactory,
        \Abc\Xyz\Model\sStoreFactory $sStoreFactory,
        \Magento\Framework\Message\ManagerInterface $messageManager
    ) {
        $this->_objectManager = $objectManager;
        $this->_request = $request;
        $this->_helper = $helper;
        $this->scopeConfig = $scopeConfig;
        $this->_eavConfig = $eavConfig;
        $this->_productmFactory = $productmFactory;
        $this->_productdFactory = $ProductdFactory;
        $this->_productsFactory = $productsFactory;
        $this->sStore = $sStoreFactory;
        $this->storeManager = $storeManager;
        $this->messageManager = $messageManager;
    }
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $product = $observer->getEvent()->getProduct();
        $id = $product->getId();
        $data = $this->_request->getParams();
        $currentWebsite = $this->storeManager->getStore()->getWebsiteId();
        try
        {
            if ($id) {
                $YG14 = $this->_request->getParam('YG14');
                $YG14_size = $this->_request->getParam('YG14_size');

                $mI = $this->_productmFactory->create()->getCollection();
                $mI->addFieldToFilter('product_id', $id);
                /** Delete all records*/
                if ($YG14 != "") {
                    if (!empty($mI)) {
                        foreach ($mI as $mtl) {
                            $mI = $this->_productmFactory->create()->load($mtl->getId());
                            $mI->delete();
                        }
                    }
                }

                if ($YG14 != "") {
                    $mISave = $this->_productmFactory->create();
                    $mISave->setProductId($id);
                    $mISave->setMtlWeight($YG14);
                    $mISave->setMtlType('YG14');
                    $mISave->setSizeIncrementWeightDiff($YG14_size);
                    $mISave->save();
                }
                $dD = $this->_request->getParam('d');
                if ($dD) {
                    $dInfoDelete = $this->_productdFactory->create()->getCollection()->addFieldToFilter('product_id', $id);
                    foreach ($dInfoDelete as $key => $dia) {
                        $dInfo = $this->_productdFactory->create()->load($dia->getId());
                        $dInfo->delete();
                    }
                    foreach ($dD as $d) {
                        $dS = $this->_productdFactory->create();
                        $dS->setProductId($id);
                        if (array_key_exists('d_s', $d)) {
                            $dS->setDS($d['d_s']);
                        }
                        if (array_key_exists('d_w', $d)) {
                            $dS->setDW($d['d_w']);
                        }
                        if (array_key_exists('d_q', $d)) {
                            $dS->setDQ($d['d_q']);
                        }
                        if (array_key_exists('d_s_t', $d)) {
                            $dS->setDST($d['d_s_t']);
                        }
                        $dS->save();
                    }
                } else {
                    $deld = $this->_request->getParam('deld');
                    if ($deld != "") {
                        $delD = explode(",", $deld);
                        foreach ($delD as $delDIds) {
                            $dD = $this->_productdFactory->create()->load($delDIds);
                            $dD->delete();
                        }
                    }
                }
                $sD = $this->_request->getParam('st');
                if ($sD) {
                    foreach ($sD as $sts) {
                        $ssSave = $this->_productsFactory->create();
                        if (isset($sts['st_ids'])) {
                            $ssSave->setId($sts['st_ids']);
                        }
                        $ssSave->setProductId($id);
                        if (array_key_exists('st_c', $sts)) {
                            $ssSave->setStC($sts['st_c']);
                        }
                        if (array_key_exists('st_sett', $sts)) {
                            $ssSave->setStSett($sts['st_sett']);
                        }
                        if (array_key_exists('st_s', $sts)) {
                            $ssSave->setStS($sts['st_s']);
                        }
                        if (array_key_exists('st_w', $sts)) {
                            $ssSave->setStW($sts['st_w']);
                        }
                        if (array_key_exists('st_q', $sts)) {
                            $ssSave->setStQ($sts['st_q']);
                        }
                        $ssSave->save();
                        $sStore = $this->sStore->create();
                        $sStoreExists = $sStore->getCollection()->addFieldToFilter('st_id', $ssSave->getId())->addFieldToFilter('website_id', $currentWebsite);
                        if (!empty($sStoreExists->getData())) {
                            foreach ($sStoreExists as $value) {
                                $sStore->load($value->getId());
                                $sStore->setId($value->getId());
                                $sStore->setProductId($id);
                                $sStore->setPrice($sts['price']);
                                $sStore->save();
                            }
                        } else {
                            $sStore->setWebsiteId($currentWebsite);
                            $sStore->setProductId($id);
                            $sStore->setStId($ssSave->getId());
                            if (array_key_exists('price', $sts)) {
                                $sStore->setPrice($sts['price']);
                            }
                            $sStore->save();
                        }
                    }
                    $delSt = $this->_request->getParam('delSt');
                    if ($delSt != "") {
                        $delS = explode(",", $delSt);
                        foreach ($delS as $delSIds) {
                            $dDelete = $this->_productsFactory->create()->load($delSIds);
                            $dDelete->delete();
                        }
                    }
                } else {
                    $delSt = $this->_request->getParam('delSt');
                    if ($delSt != "") {
                        $delS = explode(",", $delSt);
                        foreach ($delS as $delSIds) {
                            $dDelete = $this->_productsFactory->create()->load($delSIds);
                            $dDelete->delete();
                        }
                    }
                }

                $prices = $this->_helper->defaultPriceCalculate($id, $product, $currentWebsite);
                $product->setWebsiteId($currentWebsite)->setPrice($prices['finalPrice']);
                if ($prices['discountedPrice'] != 0) {
                    $product->setSpecialPrice($prices['discountedPrice']);
                }
                $product->save();

            }
        } catch (\Magento\Framework\Exception\LocalizedException $e) {
            $this->messageManager->addError($e->getMessage());
        } catch (\RuntimeException $e) {
            $this->messageManager->addError($e->getMessage());
        } catch (\Exception $e) {
            $this->messageManager->addException($e, __('Something went wrong while saving the post.'));
        }
    }
}

Cómo resolverlo ?

Por favor, ayúdame.


Muestre su código que se utiliza para guardar el producto.
Suresh Chikani

Puede establecer el tamaño de la memoria en -1, por lo que utilizará el tamaño de memoria requerido, la configuración es ini_set ('memory_limit', -1);
Himmat Paliwal

Compruébalo @SureshChikani
Rohan Hapani

¿En qué lugar pongo el tamaño de memoria -1?
Rohan Hapani

Puede ponerlo en el archivo index.php en su raíz de magento.
Himmat Paliwal

Respuestas:


32

Pruebe los siguientes comandos:

php bin/magento setup:upgrade
php bin/magento setup:static-content:deploy
php bin/magento setup:di:compile
php bin/magento cache:flush
php bin/magento cache:clean

//To run command forcefully
php -f bin/magento

//To run command with memory limit 4G
php -d memory_limit=4G bin/magento

//To run command with max memory limit
php -d memory_limit=-1 bin/magento

Si aún tiene problemas, intente la siguiente configuración:

  1. [Carpeta raíz de Magento2] /index.php
ini_set('memory_limit',256);

OR

ini_set('memory_limit','-1');

Verifique el valor actual de memory_limit usando CLI:

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

2. php -i | grep memory

Si el problema persiste, aumente el límite de memoria (por ejemplo, hasta 2048 M) en los siguientes lugares:

  1. [Carpeta raíz de Magento2] /. User.ini
memory_limit = 768M
  1. [Magento2-root-folder] /. Htaccess (2 lugares)
php_value memory_limit 768M
  1. [Magento2-root-folder] /pub/.user.ini
memory_limit = 768M
  1. [Magento2-root-folder] /pub/.htaccess (2 lugares)
php_value memory_limit 768M

El problema ya debería resolverse; si todavía está allí, desactive su módulo personalizado y verifique nuevamente.


1
súper. gracias. editar .user.ini me ayudó.
James M

@JamesM: encantado de ayudar. Seguir ayudando :)
Pratik Oza

Gracias muy útil para mí, he agregado esto y el problema resuelto
Pradip Garchar

La explicación es genial. Sigue con este enfoque
Jai

@PratikOza ¿Enfrentando un error similar, así que usando sus sugerencias también debería ejecutar estos comandos? para probar si funciona o no php bin / magento setup: static-content: deploy -f, php bin / magento cache: flush
Ahmer Saeed

7

Una solución rápida es

php -dmemory_limit=6G bin/magento setup:static-content:deploy

Prueba esto, ha funcionado para mí.


3

792723456 bytes significan 756 MB. Este es el valor que sugiere Magento y es el valor predeterminado en sus configuraciones de muestra (nginx en particular).

Intente todo lo que sugirió @Pratik Oza y permítame señalar otro lugar. ¿Estás usando php-fpm o un CGI similar? Si es así, compruebe los límites de memoria allí también.

En mi caso, estoy usando nginx + php-fpm y configuré el memory_limit por proyecto usando el

php_value [memory_limit] = [N] MB

Además, si está utilizando un CGI, intente esto. Primero detenga su servidor web, luego reinicie su CGI y luego inicie su servidor web nuevamente.

El es un problema aleatorio que enfrenté una vez que me hizo hacer lo anterior. Si no lo hice, fue como nginx set sus propios valores a todo lo que se pasó a php-fpm sin preocuparse por los valores establecidos en php.ini o fpm.conf.

EDITAR: veo que el problema se resolvió editando .user.ini. Eso significa que en realidad fue nginx el que pasó otro valor y también podría ser el caso que describí. Solo estoy señalando esto. También a cualquiera que lea las otras respuestas, por favor no use set_init('memory_limit',-1)NUNCA.

He visto a un desarrollador mío usar esto para probar una optimización de consultas mysql y el script alcanzó un ram de 35 gigas que siguió aumentando hasta que lo maté después de 10 minutos. Simplemente configure el valor en un umbral decente hasta llegar al punto de ejecución y déjelo allí o fije los valores o el parámetro de perspectivas user.ini / fpm.conf / fascgi.


1
php bin/magento setup:upgrade

php bin/magento setup:static-content:deploy -f

php bin/magento cache:flush

php bin/magento cache:clean

Definitivamente será trabajo.


0

Esto me hizo tropezar al instalar desde el archivo en lugar del compositor para magento 2.3. En mi caso, la configuración que estaba cambiando estaba en el lugar equivocado.

Estaba actualizando:

vi /etc/php/7.2/cli/php.ini

necesario para actualizar:

vi /etc/php/7.2/apache2/php.ini

Esto es para ambos errores como:

PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted

y

PHP Fatal error:  Maximum execution time of 30 seconds exceeded in....

También asegúrese de habilitar la reescritura: a2enmod rewritesi tiene problemas con las páginas.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.