Magento 2.2.2: Kích thước bộ nhớ cho phép hết 792723456 byte (đã cố phân bổ 184320 byte)


11

Tôi đang làm việc trong magento 2.2.2 và khi tôi lưu sản phẩm Nó sẽ hiển thị lỗi này.

Lỗi nghiêm trọng: Kích thước bộ nhớ cho phép hết 792723456 byte (đã cố phân bổ 184320 byte) trong /var/www/html/Demo/vendor/magento/framework/Profiler.php trên dòng 153

Php version : 7.0

Magento : 2.2.2

Tôi cũng thay đổi áp dụng memory_limit = 16Gtrong php.initập tin và khởi động lại máy chủ apache. Tuy nhiên, vấn đề này không được khắc phục.

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

Làm thế nào để giải quyết nó?

Làm ơn giúp tôi.


Hiển thị mã của bạn mà bạn đang sử dụng để lưu sản phẩm.
Suresh Chikani

Bạn có thể đặt kích thước bộ nhớ thành -1, do đó, nó sẽ sử dụng kích thước bộ nhớ cần thiết, cài đặt là ini_set ('memory_limit', -1);
Himmat Paliwal

Kiểm tra xem @SureshChikani
Rohan Hapani

Ở nơi nào tôi đặt kích thước bộ nhớ -1?
Rohan Hapani

Bạn có thể đặt nó trong tệp index.php tại thư mục gốc của magento.
Himmat Paliwal

Câu trả lời:


32

Hãy thử các lệnh sau:

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

Nếu bạn vẫn gặp phải sự cố thì hãy thử các cài đặt sau:

  1. [Magento2-thư mục gốc] /index.php
ini_set('memory_limit',256);

OR

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

Kiểm tra giá trị memory_limit hiện tại bằng CLI:

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

2. php -i | grep memory

Nếu sự cố vẫn còn thì hãy tăng giới hạn bộ nhớ (ví dụ: lên tới 2048M) ở những vị trí sau:

  1. [Thư mục gốc Magento2] /. User.ini
memory_limit = 768M
  1. [Magento2-thư mục gốc] /. Htaccess (2 vị trí)
php_value memory_limit 768M
  1. [Thư mục gốc Magento2] /pub/.user.ini
memory_limit = 768M
  1. [Magento2-root-thư mục] /pub/.htaccess (2 vị trí)
php_value memory_limit 768M

Vấn đề cần được giải quyết ngay bây giờ, nếu nó vẫn còn thì hãy tắt mô-đun tùy chỉnh của bạn và kiểm tra lại.


1
siêu. cảm ơn bạn. chỉnh sửa .user.ini đã giúp tôi.
James M

@JamesM - Rất vui được giúp đỡ. Hãy tiếp tục giúp đỡ :)
Pratik Oza

Cảm ơn bạn rất hữu ích cho tôi, tôi đã thêm vấn đề này và giải quyết vấn đề
Pradip Garchar 20/03/19

Giải thích là tuyệt vời. Giữ nó theo cách tiếp cận này
Jai

@PratikOza Đối mặt với lỗi tương tự vì vậy sử dụng đề xuất của bạn tôi cũng phải chạy các lệnh này ?? để kiểm tra xem nó có hoạt động hay không cài đặt php bin / magento: static-content: triển khai -f, php bin / magento cache: flush
Ahmer Saeed

7

Một giải pháp nhanh chóng là

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

Hãy thử nó, nó làm việc cho tôi.


3

792723456 byte có nghĩa là 756 MB. Đây là giá trị mà Magento gợi ý và là mặc định trên các cấu hình mẫu của họ (cụ thể là nginx).

Hãy thử mọi thứ mà @Pratik Oza gợi ý và để tôi chỉ đến một nơi khác. Bạn đang sử dụng php-fpm hoặc CGI tương tự? Nếu vậy thì xin vui lòng kiểm tra giới hạn bộ nhớ ở đó quá.

Trong trường hợp của tôi, tôi đang sử dụng nginx + php-fpm và tôi đặt memory_limit cho mỗi dự án bằng cách sử dụng

php_value [memory_limit] = [N] MB

Ngoài ra nếu bạn đang sử dụng CGI thì hãy thử điều này. Trước tiên hãy dừng máy chủ web của bạn sau đó khởi động lại CGI của bạn và sau đó khởi động lại máy chủ web của bạn.

Đây là một vấn đề ngẫu nhiên mà tôi gặp phải một lần khiến tôi phải làm như trên. Nếu tôi không làm như vậy thì nó giống như nginx đặt giá trị của riêng nó cho bất kỳ thứ gì được chuyển đến php-fpm mà không quan tâm đến các giá trị được đặt trên php.ini hoặc fpm.conf.

EDIT: Tôi thấy vấn đề đã được giải quyết bằng cách chỉnh sửa .user.ini. Điều đó có nghĩa là nó thực sự đã nginx vượt qua một giá trị khác và cũng có thể là trường hợp tôi mô tả. Chỉ cần chỉ ra điều này. Ngoài ra với bất cứ ai đọc các câu trả lời khác xin vui lòng không sử dụng set_init('memory_limit',-1)EVER.

Tôi đã thấy một nhà phát triển của tôi sử dụng điều này để kiểm tra tối ưu hóa truy vấn mysql và tập lệnh đạt được ram 35gigs cứ tăng dần cho đến khi tôi giết nó sau 10 phút. Chỉ cần đặt giá trị ở ngưỡng phù hợp cho đến khi bạn đến điểm chạy và để nó ở đó hoặc sửa các giá trị hoặc tham số 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

Nó chắc chắn là công việc.


0

Điều này làm tôi vấp ngã khi cài đặt từ kho lưu trữ thay vì nhà soạn nhạc cho magento 2.3. Trong trường hợp của tôi, các cài đặt tôi đã thay đổi ở sai vị trí.

Đang cập nhật:

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

cần thiết để cập nhật:

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

Đây là cho cả hai lỗi như:

PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted

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

Cũng đảm bảo cho phép viết lại: a2enmod rewritenếu có vấn đề với các trang.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.