Magento 2.2.2 : 허용 된 메모리 크기 792723456 바이트 소모 됨 (184320 바이트 할당 시도)


11

magento 2.2.2에서 작업 중이며 제품을 저장할 때이 오류가 표시됩니다.

치명적인 오류 : 153 행의 /var/www/html/Demo/vendor/magento/framework/Profiler.php에서 792723456 바이트의 메모리 크기가 소진되었습니다 (184320 바이트를 할당하려고 시도했습니다).

Php version : 7.0

Magento : 2.2.2

또한 변경 적용 memory_limit = 16G에서 php.ini파일 및 아파치 서버를 다시 시작합니다. 여전히이 문제는 해결되지 않았습니다.

<?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

magento의 루트에있는 index.php 파일에 넣을 수 있습니다.
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-root-folder] /index.php
ini_set('memory_limit',256);

OR

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

CLI를 사용하여 현재 memory_limit 값을 확인하십시오.

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

2. php -i | grep memory

문제가 계속 지속되면 다음 위치에서 메모리 제한을 늘리십시오 (예 : 최대 2048M).

  1. [Magento2-root-folder] /. user.ini
memory_limit = 768M
  1. [Magento2-root-folder] /. htaccess (2 개소)
php_value memory_limit 768M
  1. [Magento2-root-folder] /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 setup : static-content : deploy -f, PHP bin / magento cache : flush
Ahmer Saeed

7

빠른 해결책은

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

이것을 시도하십시오, 그것은 나를 위해 일했습니다.


3

792723456 바이트는 756MB를 의미합니다. 이것은 Magento가 제안하는 값이며 샘플 구성 (특히 nginx)의 기본값입니다.

@Pratik Oza가 제안한 모든 것을 시도하고 다른 곳을 가리켜 드리겠습니다. php-fpm 또는 유사한 CGI를 사용하고 있습니까? 그렇다면 메모리 제한도 확인하십시오.

제 경우에는 nginx + php-fpm을 사용하고 있으며 프로젝트를 사용하여 memory_limit를 설정합니다.

php_value [memory_limit] = [N] MB

또한 CGI를 사용하는 경우 이것을 시도하십시오. 먼저 웹 서버를 중지 한 다음 CGI를 다시 시작한 다음 웹 서버를 다시 시작하십시오.

위의 작업을 수행 한 적이있는 무작위 문제입니다 .nginx와 같지 않으면 php.ini 또는 fpm.conf에 설정된 값을 신경 쓰지 않고 php-fpm에 전달 된 항목에 자체 값을 설정합니다.

편집 : .user.ini를 편집하여 문제가 해결되었음을 알 수 있습니다. 그것은 실제로 다른 값을 전달하고 내가 설명한 경우가 될 수있는 것은 nginx라는 것을 의미합니다. 이것을 지적하십시오. 또한 다른 답변을 읽는 사람에게는 절대로 사용하지 마십시오 set_init('memory_limit',-1).

필자는 mysql 쿼리 최적화를 테스트하기 위해 이것을 사용하는 개발자를 보았고 스크립트는 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 용 composer 대신 아카이브에서 설치할 때이 문제가 발생했습니다. 필자의 경우 변경 한 설정이 잘못된 위치에있었습니다.

업데이트 중입니다 :

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.