Magento 2.2.2: taille de mémoire autorisée de 792723456 octets épuisée (tentative d'allocation de 184320 octets)


11

Je travaille dans magento 2.2.2 et lorsque j'enregistre le produit, il affichera cette erreur.

Erreur fatale: taille de mémoire autorisée de 792723456 octets épuisée (tentative d'allocation de 184320 octets) dans /var/www/html/Demo/vendor/magento/framework/Profiler.php sur la ligne 153

Php version : 7.0

Magento : 2.2.2

J'ai aussi des changements s'appliquent dans memory_limit = 16Gau php.inifichier et redémarrez apache serveur. encore, ce problème n'est pas résolu.

<?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.'));
        }
    }
}

Comment le résoudre ?

Aidez-moi, s'il vous plaît.


Montrez votre code que vous utilisez pour enregistrer le produit.
Suresh Chikani

Vous pouvez définir la taille de la mémoire sur -1, afin qu'il utilise la taille de mémoire requise, le paramètre est ini_set ('memory_limit', -1);
Himmat Paliwal

Vérifiez-le @SureshChikani
Rohan Hapani

À quel endroit j'ai mis la taille de la mémoire -1?
Rohan Hapani

Vous pouvez le mettre dans le fichier index.php à votre racine de magento.
Himmat Paliwal

Réponses:


33

Essayez les commandes suivantes:

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 vous rencontrez toujours des problèmes, essayez les paramètres suivants:

  1. [Magento2-root-folder] /index.php
ini_set('memory_limit',256);

OR

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

Vérifiez la valeur memory_limit actuelle à l'aide de CLI:

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

2. php -i | grep memory

Si le problème persiste, augmentez la limite de mémoire (par exemple, jusqu'à 2048 Mo) aux endroits suivants:

  1. [Magento2-root-folder] /. User.ini
memory_limit = 768M
  1. [Magento2-root-folder] /. Htaccess (2 places)
php_value memory_limit 768M
  1. [Dossier racine Magento2] /pub/.user.ini
memory_limit = 768M
  1. [Magento2-root-folder] /pub/.htaccess (2 places)
php_value memory_limit 768M

Le problème devrait être résolu maintenant, s'il est toujours là, désactivez votre module personnalisé et vérifiez à nouveau.


1
super. Merci. modifier .user.ini m'a aidé.
James M

@JamesM - Heureux de vous aider. Continuez à aider :)
Pratik Oza

Merci très utile pour moi, j'ai ajouté ceci et le problème a été résolu
Pradip Garchar

L'explication est super. Continuez cette approche
Jai

@PratikOza Face à une erreur similaire, si j'utilise vos suggestions, dois-je également exécuter ces commandes ?? pour tester si cela fonctionne ou non php bin / magento setup: static-content: deploy -f, php bin / magento cache: flush
Ahmer Saeed

7

Une solution rapide est

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

Essayez ceci, ça a marché pour moi.


3

792723456 octets signifient 756 Mo. C'est la valeur suggérée par Magento et c'est la valeur par défaut sur leurs exemples de configuration (nginx en particulier).

Essayez tout ce que @Pratik Oza a suggéré et laissez-moi pointer vers un autre endroit. Utilisez-vous php-fpm ou un CGI similaire? Si c'est le cas, vérifiez également les limites de mémoire.

Dans mon cas, j'utilise nginx + php-fpm et j'ai défini la mémoire_limit par projet en utilisant le

php_value [memory_limit] = [N] Mo

Aussi, si vous utilisez un CGI, essayez ceci. Arrêtez d'abord votre serveur Web, puis redémarrez CGI, puis redémarrez votre serveur Web.

C'est un problème aléatoire auquel j'ai été confronté une fois et qui m'a obligé à faire ce qui précède.Si je ne l'ai pas fait, c'était comme si nginx avait défini ses propres valeurs pour tout ce qui était passé à php-fpm sans se soucier des valeurs définies sur php.ini ou fpm.conf.

EDIT: Je vois que le problème a été résolu en modifiant le .user.ini. Cela signifie que c'est en fait nginx qui a passé une autre valeur et pourrait également être le cas que j'ai décrit. Je fais juste remarquer celui-ci. Aussi pour quiconque lisant les autres réponses, veuillez ne jamais utiliser set_init('memory_limit',-1)JAMAIS.

J'ai vu un de mes développeurs utiliser cela pour tester une optimisation de requête mysql et le script a atteint un RAM de 35 Go qui n'a cessé d'augmenter jusqu'à ce que je le tue après 10 minutes. Définissez simplement la valeur sur un seuil décent jusqu'à ce que vous arriviez au point de fonctionnement et que vous le laissiez là ou que vous fixiez les valeurs ou le paramètre perspectives 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

Ce sera définitivement du travail.


0

Cela m'a déclenché lors de l'installation à partir des archives au lieu du compositeur pour magento 2.3. Dans mon cas, les paramètres que je modifiais étaient au mauvais endroit.

Était en train de mettre à jour:

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

nécessaire pour mettre à jour:

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

C'est pour les deux erreurs comme:

PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted

et

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

Assurez-vous également d'activer la réécriture: a2enmod rewritesi vous rencontrez des problèmes avec les pages.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.