Magento 2.2.2: Zulässige Speichergröße von 792723456 Bytes erschöpft (versucht, 184320 Bytes zuzuweisen)

11

Ich arbeite in Magento 2.2.2 und wenn ich das Produkt speichere, wird dieser Fehler angezeigt.

Schwerwiegender Fehler: Zulässige Speichergröße von 792723456 Byte erschöpft (versucht, 184320 Byte zuzuweisen) in /var/www/html/Demo/vendor/magento/framework/Profiler.php in Zeile 153

Php version : 7.0

Magento : 2.2.2

Ich beziehe mich auch auf Änderungen memory_limit = 16Gin der php.iniDatei und starte den Apache-Server neu. Dieses Problem wurde jedoch nicht behoben.

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

Wie man es löst ?

Bitte hilf mir.

Rohan Hapani
quelle
Zeigen Sie Ihren Code an, mit dem Sie das Produkt speichern.
Suresh Chikani
Sie können die Speichergröße auf -1 setzen, damit die erforderliche Speichergröße verwendet wird. Die Einstellung ist ini_set ('memory_limit', -1).
Himmat Paliwal
Überprüfen Sie es @SureshChikani
Rohan Hapani
An welcher Stelle stelle ich die Speichergröße -1 ein?
Rohan Hapani
Sie können es in die Datei index.php im Stammverzeichnis von Magento einfügen.
Himmat Paliwal

Antworten:

32

Versuchen Sie folgende Befehle:

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

Wenn immer noch Probleme auftreten, versuchen Sie die folgenden Einstellungen:

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

OR

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

Überprüfen Sie den aktuellen Wert für memory_limit mithilfe der CLI:

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

2. php -i | grep memory

Wenn das Problem weiterhin besteht, erhöhen Sie das Speicherlimit (z. B. bis zu 2048 MB) an folgenden Stellen:

  1. [Magento2-root-Ordner] /. User.ini
memory_limit = 768M
  1. [Magento2-root-Ordner] /. Htaccess (2 Stellen)
php_value memory_limit 768M
  1. [Magento2-root-Ordner] /pub/.user.ini
memory_limit = 768M
  1. [Magento2-root-Ordner] /pub/.htaccess (2 Stellen)
php_value memory_limit 768M

Das Problem sollte jetzt behoben sein. Wenn es noch vorhanden ist, deaktivieren Sie Ihr benutzerdefiniertes Modul und überprüfen Sie es erneut.

Pratik Oza
quelle
1
Super. Vielen Dank. edit .user.ini hat mir geholfen.
James M
@ JamesM - Gerne helfen. Helfen Sie weiter :)
Pratik Oza
Vielen Dank sehr nützlich für mich, ich habe dies hinzugefügt und Problem behoben
Pradip Garchar
Erklärung ist großartig. Machen Sie weiter so
Jai
@PratikOza Angesichts eines ähnlichen Fehlers, also mit Ihren Vorschlägen sollte ich auch diese Befehle ausführen müssen? um es zu testen, ob es funktioniert oder nicht PHP Bin / Magento Setup: statischer Inhalt: Deploy -f, PHP Bin / Magento Cache: Flush
Ahmer Saeed
7

Eine schnelle Lösung ist

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

Versuchen Sie dies, es hat bei mir funktioniert.

Divya Sekar
quelle
3

792723456 Bytes bedeuten 756 MB. Dies ist der von Magento vorgeschlagene Wert und der Standardwert für die Beispielkonfigurationen (insbesondere Nginx).

Versuchen Sie alles, was @Pratik Oza vorgeschlagen hat, und lassen Sie mich auf einen anderen Ort verweisen. Verwenden Sie php-fpm oder ein ähnliches CGI? Wenn ja, überprüfen Sie dort bitte auch die Speicherbeschränkungen.

In meinem Fall verwende ich nginx + php-fpm und setze das memory_limit pro Projekt mit dem

php_value [memory_limit] = [N] MB

Auch wenn Sie ein CGI verwenden, versuchen Sie dies. Stoppen Sie zuerst Ihren Webserver, starten Sie dann CGI neu und starten Sie dann Ihren Webserver erneut.

Das ist ein zufälliges Problem, mit dem ich einmal konfrontiert war und das mich dazu brachte, das oben genannte zu tun. Wenn ich es nicht tat, war es so, als würde nginx seine eigenen Werte auf alles setzen, was an php-fpm übergeben wurde, ohne die auf php.ini oder fpm.conf festgelegten Werte zu berücksichtigen.

BEARBEITEN: Ich sehe, dass das Problem durch Bearbeiten der .user.ini gelöst wurde. Das bedeutet, dass es tatsächlich Nginx war, das einen anderen Wert übergeben hat und auch der von mir beschriebene Fall sein könnte. Ich möchte nur darauf hinweisen. Auch für alle, die die anderen Antworten lesen, verwenden Sie bitte set_init('memory_limit',-1)NIEMALS.

Ich habe einen Entwickler von mir gesehen, der damit eine MySQL-Abfrageoptimierung getestet hat, und das Skript erreichte einen RAM von 35 GB, der weiter zunahm, bis ich ihn nach 10 Minuten tötete. Setzen Sie den Wert einfach auf einen anständigen Schwellenwert, bis Sie zum Startpunkt gelangen, und lassen Sie ihn dort oder korrigieren Sie die Werte oder die Perspektiven des Parameters user.ini / fpm.conf / fascgi.

1337_sanc
quelle
1
php bin/magento setup:upgrade

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

php bin/magento cache:flush

php bin/magento cache:clean

Es ist definitiv Arbeit.

Ajay
quelle
0

Dies hat mich bei der Installation aus dem Archiv anstelle von Composer für Magento 2.3 gestolpert. In meinem Fall waren die Einstellungen, die ich geändert habe, am falschen Ort.

Wurde aktualisiert:

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

benötigt, um zu aktualisieren:

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

Dies gilt für beide Fehler wie:

PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted

und

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

Stellen Sie außerdem sicher, dass das Umschreiben aktiviert ist: a2enmod rewriteWenn Probleme mit Seiten auftreten.

lernt mehr
quelle