Magento 2.2.2: Ukuran memori yang diizinkan habis 792723456 byte (mencoba mengalokasikan 184320 byte)

11

Saya bekerja di Magento 2.2.2 dan ketika saya menyimpan produk, ini akan menampilkan kesalahan ini.

Kesalahan fatal: Ukuran memori yang diizinkan dari 792723456 byte habis (mencoba mengalokasikan 184320 byte) di /var/www/html/Demo/vendor/magento/framework/Profiler.php on line 153

Php version : 7.0

Magento : 2.2.2

Saya juga perubahan berlaku memory_limit = 16Gdi php.inifile dan restart server apache. tetap saja, masalah ini belum diperbaiki.

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

Bagaimana cara mengatasinya?

Tolong bantu aku.

Rohan Hapani
sumber
Tunjukkan kode Anda yang digunakan untuk menyimpan produk.
Suresh Chikani
Anda dapat mengatur ukuran memori ke -1, sehingga akan menggunakan ukuran memori yang diperlukan, pengaturan ini_set ('memory_limit', -1);
Himmat Paliwal
Periksa @SureshChikani
Rohan Hapani
Di tempat mana saya meletakkan ukuran memori -1?
Rohan Hapani
Anda dapat meletakkannya di file index.php di root magento Anda.
Himmat Paliwal

Jawaban:

32

Coba perintah berikut:

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

Jika Anda masih menghadapi masalah, cobalah pengaturan berikut:

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

OR

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

Periksa nilai memory_limit saat ini menggunakan CLI:

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

2. php -i | grep memory

Jika masalah masih berlanjut, tambahkan batas memori (mis., Hingga 2048M) di tempat-tempat berikut:

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

Masalah harus diselesaikan sekarang, jika masih ada maka nonaktifkan modul khusus Anda dan periksa lagi.

Pratik Oza
sumber
1
super. Terima kasih. edit .user.ini membantu saya.
James M
@ JamesM - Senang membantu. Terus membantu :)
Pratik Oza
Terima kasih sangat berguna bagi saya, saya telah menambahkan ini dan masalah terselesaikan
Pradip Garchar
Penjelasannya bagus. Pertahankan pendekatan ini
Jai
@PratikOza Menghadapi kesalahan serupa sehingga menggunakan saran Anda haruskah saya juga harus menjalankan perintah ini ?? untuk mengujinya apakah itu berfungsi atau tidak setup php bin / magento: static-content: deploy -f, php bin / magento cache: flush
Ahmer Saeed
7

Solusi cepat adalah

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

Coba ini, ini bekerja untuk saya.

divya sekar
sumber
3

792723456 byte berarti 756 MB. Ini adalah nilai yang Magento sarankan dan merupakan default pada konfigurasi sampel mereka (khususnya nginx).

Cobalah segala sesuatu yang disarankan @Pratik Oza dan izinkan saya menunjuk ke tempat lain. Apakah Anda menggunakan php-fpm atau CGI serupa? Jika demikian maka silakan periksa batas memori di sana juga.

Dalam kasus saya, saya menggunakan nginx + php-fpm dan saya mengatur memory_limit per proyek menggunakan

php_value [memory_limit] = [N] MB

Juga jika Anda menggunakan CGI maka coba ini. Pertama-tama hentikan server web Anda, kemudian restart CGI Anda dan kemudian jalankan server web Anda lagi.

Ini adalah masalah acak yang saya hadapi sekali yang membuat saya melakukan hal di atas. Jika saya tidak melakukannya maka itu seperti nginx mengatur nilai sendiri untuk apa pun yang diteruskan ke php-fpm tanpa memperhatikan nilai yang ditetapkan pada php.ini atau fpm.conf.

EDIT: Saya melihat masalah diselesaikan dengan mengedit .user.ini. Itu berarti bahwa sebenarnya nginx yang melewati nilai lain dan juga bisa menjadi kasus yang saya jelaskan. Hanya menunjukkan ini. Juga kepada siapa pun yang membaca jawaban lain tolong jangan gunakan set_init('memory_limit',-1)EVER.

Saya telah melihat pengembang saya menggunakan ini untuk menguji optimasi permintaan mysql dan script mencapai ram 35gg yang terus meningkat sampai saya membunuhnya setelah 10 menit. Cukup atur nilainya ke ambang batas yang layak sampai Anda mencapai titik berjalan dan biarkan di sana atau perbaiki nilainya atau parameter perspektif user.ini / fpm.conf / fascgi.

1337_sanc
sumber
1
php bin/magento setup:upgrade

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

php bin/magento cache:flush

php bin/magento cache:clean

Ini pasti bekerja.

Ajay
sumber
0

Ini membuat saya tersandung ketika menginstal dari arsip bukan komposer untuk magento 2.3. Dalam kasus saya, pengaturan yang saya ubah berada di tempat yang salah.

Sedang memperbarui:

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

diperlukan untuk memperbarui:

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

Ini untuk kedua kesalahan seperti:

PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted

dan

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

Pastikan juga untuk mengaktifkan penulisan ulang: a2enmod rewritejika mengalami masalah dengan halaman.

belajarsemore lagi
sumber