Magento 2.2.2: ขนาดหน่วยความจำที่อนุญาตของ 792723456 ไบต์หมดลง (พยายามจัดสรร 184320 ไบต์)


11

ฉันทำงานใน magento 2.2.2 และเมื่อฉันบันทึกผลิตภัณฑ์มันจะแสดงข้อผิดพลาดนี้

ข้อผิดพลาดร้ายแรง: ขนาดหน่วยความจำที่อนุญาตของ 792723456 ไบต์หมดลง (พยายามจัดสรร 184320 ไบต์) ใน /var/www/html/Demo/vendor/magento/framework/Profiler.php ที่บรรทัด 153

Php version : 7.0

Magento : 2.2.2

ฉันยังใช้การเปลี่ยนแปลงmemory_limit = 16Gในphp.iniไฟล์และรีสตาร์ทเซิร์ฟเวอร์ apache ยังปัญหานี้ไม่ได้รับการแก้ไข

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

วิธีแก้ปัญหา

โปรดช่วยฉันด้วย


แสดงรหัสของคุณที่คุณใช้สำหรับบันทึกผลิตภัณฑ์
Suresh Chikani

คุณสามารถตั้งค่าขนาดหน่วยความจำเป็น -1 ดังนั้นมันจะใช้ขนาดหน่วยความจำที่ต้องการการตั้งค่าเป็น ini_set ('memory_limit', -1);
Himmat Paliwal

ตรวจสอบได้ที่ @SureshChikani
Rohan Hapani

ฉันใส่ขนาดหน่วยความจำ -1 ไว้ที่ใด
Rohan Hapani

คุณสามารถใส่ไว้ในไฟล์ index.php ที่ root ของ magento
Himmat Paliwal

คำตอบ:


34

ลองใช้คำสั่งต่อไปนี้:

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

หากคุณยังประสบปัญหาอยู่ให้ลองตั้งค่าดังต่อไปนี้:

  1. [Magento2 รากโฟลเดอร์] /index.php
ini_set('memory_limit',256);

OR

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

ตรวจสอบค่า memory_limit ปัจจุบันโดยใช้ CLI:

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

2. php -i | grep memory

หากปัญหายังคงมีอยู่ให้เพิ่มขีด จำกัด หน่วยความจำ (เช่นสูงสุด 2048M) ในตำแหน่งต่อไปนี้:

  1. [Magento2 รากโฟลเดอร์] /. user.ini
memory_limit = 768M
  1. [Magento2-root-folder] /. htaccess (2 แห่ง)
php_value memory_limit 768M
  1. [Magento2 รากโฟลเดอร์] /pub/.user.ini
memory_limit = 768M
  1. [Magento2-root-folder] /pub/.htaccess (2 แห่ง)
php_value memory_limit 768M

ปัญหาควรได้รับการแก้ไขในตอนนี้ถ้ายังมีอยู่ให้ปิดการใช้งานโมดูลที่กำหนดเองของคุณและตรวจสอบอีกครั้ง


1
ซุปเปอร์ ขอบคุณ. แก้ไข. user.ini ช่วยฉัน
James M

@JamesM - ยินดีที่จะช่วยเหลือ ให้ความช่วยเหลือ :)
Pratik Oza

ขอบคุณมีประโยชน์มากสำหรับฉันฉันได้เพิ่มสิ่งนี้และแก้ไขปัญหาแล้ว
Pradip Garchar

คำอธิบายดีมาก ติดตามวิธีการนี้อย่างต่อเนื่อง
Jai

@PratikOza เผชิญข้อผิดพลาดที่คล้ายกันดังนั้นการใช้คำแนะนำของคุณฉันควรจะต้องใช้คำสั่งเหล่านี้หรือไม่? เพื่อทดสอบว่าทำงานหรือไม่การตั้งค่า php bin / magento: static-content: deploy -f, php bin / magento cache: flush
Ahmer Saeed

7

ทางออกที่รวดเร็วคือ

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

ลองสิ่งนี้มันใช้ได้สำหรับฉัน


3

792723456 ไบต์หมายถึง 756 MB นี่เป็นค่าที่ Magento แนะนำและเป็นค่าเริ่มต้นสำหรับการกำหนดค่าตัวอย่าง (โดยเฉพาะอย่างยิ่ง nginx)

ลองทำทุกอย่างที่ @Pratik Oza แนะนำแล้วขอให้ฉันชี้ไปที่อื่น คุณใช้ php-fpm หรือ CGI ที่คล้ายกันหรือไม่ ถ้าเป็นเช่นนั้นโปรดตรวจสอบขีด จำกัด หน่วยความจำที่นั่นด้วย

ในกรณีของฉันฉันใช้ nginx + php-fpm และฉันตั้ง memory_limit ต่อโครงการโดยใช้

php_value [memory_limit] = [N] MB

นอกจากนี้ถ้าคุณใช้ CGI ให้ลองทำเช่นนี้ ก่อนอื่นให้หยุดเว็บเซิร์ฟเวอร์ของคุณจากนั้นรีสตาร์ท CGI แล้วเริ่มเว็บเซิร์ฟเวอร์ของคุณอีกครั้ง

ปัญหาสุ่มที่ฉันต้องเผชิญครั้งหนึ่งที่ทำให้ฉันทำข้างต้นถ้าฉันไม่ได้แล้วมันก็เหมือนชุด nginx มันเป็นค่าของตัวเองเพื่อสิ่งที่ผ่านไปยัง php-fpm โดยไม่ต้องดูแลค่าที่ตั้งอยู่บน php.ini หรือ fpm.conf

แก้ไข: ฉันเห็นปัญหาได้รับการแก้ไขโดยการแก้ไข. user.ini นั่นหมายความว่าเป็นจริง nginx ที่ส่งผ่านค่าอื่นและอาจเป็นกรณีที่ฉันอธิบาย เพียงแค่ชี้สิ่งนี้ออกมา นอกจากนี้สำหรับทุกคนที่อ่านคำตอบอื่น ๆ โปรดอย่าใช้set_init('memory_limit',-1)EVER

ฉันเห็นผู้พัฒนาของฉันใช้สิ่งนี้เพื่อทดสอบการเพิ่มประสิทธิภาพการค้นหา mysql และสคริปต์ถึง ram 35gigs ซึ่งเพิ่มขึ้นเรื่อย ๆ จนกระทั่งฉันถูกฆ่าหลังจาก 10 นาที เพียงแค่ตั้งค่าให้เป็นเกณฑ์ที่เหมาะสมจนกว่าคุณจะไปถึงจุดทำงานและปล่อยให้มันอยู่ที่นั่นหรือแก้ไขค่าหรือพารามิเตอร์มุมมอง 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

มันใช้งานได้จริง


0

เรื่องนี้ทำให้ฉันสะดุดเมื่อติดตั้งจากไฟล์เก็บถาวรแทนการแต่งเพลงสำหรับ magento 2.3 ในกรณีของฉันการตั้งค่าที่ฉันเปลี่ยนนั้นผิดที่

กำลังอัปเดต:

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

จำเป็นต้องอัปเดต:

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

นี่เป็นข้อผิดพลาดทั้งสองอย่างเช่น:

PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted

และ

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

ตรวจสอบให้แน่ใจด้วยเพื่อเปิดใช้งานการเขียนa2enmod rewriteซ้ำ: หากมีปัญหากับหน้าเว็บ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.