Magento 2.2.2: 792723456 baytın izin verilen bellek boyutu tükendi (184320 bayt ayırmaya çalıştı)


11

Magento 2.2.2'de çalışıyorum ve ürünü kaydettiğimde bu hatayı görüntüleyecek.

Önemli hata: 153 numaralı satırda /var/www/html/Demo/vendor/magento/framework/Profiler.php dosyasında 792723456 baytın izin verilen bellek boyutu tükendi (184320 bayt ayırmaya çalıştı)

Php version : 7.0

Magento : 2.2.2

Ben de değişiklikler geçerli memory_limit = 16Giçinde php.inidosya ve apache sunucu yeniden başlatın. yine de bu sorun çözülmedi.

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

Nasıl çözeceksin ?

Lütfen bana yardım et.


Ürünü kaydetmek için kullandığınız kodu gösterin.
Suresh Chikani

Bellek boyutunu -1 olarak ayarlayabilirsiniz, böylece gerekli bellek boyutunu kullanır, ayar ini_set ('memory_limit', -1);
Himmat Paliwal

CheckS @SureshChikani
Rohan Hapani

Hangi yere bellek boyutu -1 koyuyorum?
Rohan Hapani

Magento'nun kökündeki index.php dosyasına koyabilirsiniz.
Himmat Paliwal

Yanıtlar:


34

Aşağıdaki komutları deneyin:

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

Hâlâ sorun yaşıyorsanız aşağıdaki ayarları deneyin:

  1. [Magento2 kök klasörü] /index.php
ini_set('memory_limit',256);

OR

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

CLI kullanarak geçerli memory_limit değerini kontrol edin:

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

2. php -i | grep memory

Sorun devam ederse, aşağıdaki yerlerde bellek sınırını artırın (örn. 2048M'ye kadar):

  1. [Magento2 kök klasör] /. User.ini
memory_limit = 768M
  1. [Magento2-root-folder] / .htaccess (2 basamak)
php_value memory_limit 768M
  1. [Magento2 kök klasörü] /pub/.user.ini
memory_limit = 768M
  1. [Magento2-kök klasörü] /pub/.htaccess (2 yer)
php_value memory_limit 768M

Sorun şu ana kadar çözülmelidir, eğer hala oradaysa, özel modülünüzü devre dışı bırakın ve tekrar kontrol edin.


1
Süper. teşekkür ederim. düzenlemek .user.ini helped me.
James M

@JamesM - Yardım etmekten mutluluk duyarız. Yardım etmeye devam edin :)
Pratik Oza

Benim için çok teşekkür ederim, bunu ekledim ve sorun çözüldü
Pradip Garchar

Açıklama harika. Bu yaklaşımı
Jai

@PratikOza Önerilerinizi kullanarak benzer bir hatayla karşılaşmak da bu komutları çalıştırmak zorunda mı? çalışıp çalışmadığını test etmek için nasıl php bin / magento kurulumu: statik içerik: deploy -f, php bin / magento önbellek: flush
Ahmer Saeed

7

Hızlı bir çözüm

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

Bunu dene, benim için çalıştı.


3

792723456 bayt ortalama 756 MB'dir. Bu, Magento'nun önerdiği değerdir ve örnek yapılandırmalarında (özellikle nginx) varsayılan değerdir.

@Pratik Oza'nın önerdiği her şeyi deneyin ve başka bir yere işaret etmeme izin verin. Php-fpm veya benzeri bir CGI mı kullanıyorsunuz? Eğer öyleyse lütfen oradaki bellek sınırlarını kontrol edin.

Benim durumumda nginx + php-fpm kullanıyorum ve kullanarak proje başına memory_limit

php_value [memory_limit] = [N] MB

Ayrıca bir CGI kullanıyorsanız bunu deneyin. Önce web sunucunuzu durdurun, sonra CGI'nizi yeniden başlatın ve sonra web sunucunuzu tekrar başlatın.

Bu bir kez bana yukarıdaki yaptım vardı karşılaştığı rastgele bir sorundur.O zaman ben nginx set gibiydi php.ini veya fpm.conf üzerinde ayarlanan değerleri umursmadan php-fpm geçirilen bir şey için kendi değerlerini ayarlamak gibi oldu.

EDIT: Sorunun .user.ini düzenleyerek çözüldüğünü görüyorum. Bu aslında başka bir değeri geçen nginx olduğu ve aynı zamanda tarif ettiğim durumda olduğu anlamına gelir. Sadece bunu göster. Ayrıca diğer cevapları okuyan herkese set_init('memory_limit',-1)EVER kullanmayın .

Bir mysql sorgu optimizasyonu test etmek için bunu kullanarak benim bir geliştirici gördüm ve komut dosyası ben 10mins sonra öldürene kadar artan tutulan 35gigs koç ulaştı. Sadece koşu noktasına ulaşana kadar değeri iyi bir eşik değerine ayarlayın ve orada bırakın ya da değerleri veya perspektifleri user.ini / fpm.conf / fascgi parametresini düzeltin.


1
php bin/magento setup:upgrade

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

php bin/magento cache:flush

php bin/magento cache:clean

Kesinlikle iş.


0

Magento 2.3 için besteci yerine arşivden yükleme yaparken bu beni harekete geçirdi. Benim durumumda, değiştirdiğim ayarlar yanlış yerdeydi.

Güncelleniyordu:

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

güncellenmesi gerekiyor:

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

Bu, aşağıdaki gibi her iki hata içindir:

PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted

ve

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

Ayrıca yeniden yazmayı etkinleştirdiğinizden emin olun: a2enmod rewritesayfalarla ilgili sorun yaşıyorsanız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.