Я работаю в 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.'));
}
}
}
Как это решить?
Пожалуйста, помогите мне.
magento2
products
magento2.2
fatal-error
Рохан Хапани
источник
источник
Ответы:
Попробуйте следующие команды:
Если проблема не устранена, попробуйте следующие настройки:
Проверьте текущее значение memory_limit с помощью CLI:
Если проблема не устранена, увеличьте лимит памяти (например, до 2048 МБ) в следующих местах:
Проблема должна быть решена к настоящему времени, если она все еще существует, отключите ваш пользовательский модуль и проверьте снова.
источник
Быстрое решение
Попробуйте это, это сработало для меня.
источник
792723456 байтов означают 756 МБ. Это значение, которое предлагает Magento и является значением по умолчанию для их образцов конфигурации (в частности, nginx).
Попробуйте все, что предложила @Pratik Oza, и позвольте мне указать другое место. Используете ли вы php-fpm или аналогичный CGI? Если так, то, пожалуйста, проверьте ограничения памяти там тоже.
В моем случае я использую nginx + php-fpm и устанавливаю memory_limit для каждого проекта, используя
Также, если вы используете CGI, попробуйте это. Сначала остановите ваш веб-сервер, затем перезапустите CGI, а затем снова запустите ваш веб-сервер.
Это случайная проблема, с которой я столкнулся однажды, и это заставило меня выполнить вышеописанное. Если бы я этого не сделал, это было похоже на то, что nginx устанавливает свои собственные значения для всего, что передается в php-fpm, не заботясь о значениях, установленных в php.ini или fpm.conf.
РЕДАКТИРОВАТЬ: я вижу, что проблема была решена путем редактирования .user.ini. Это означает, что на самом деле это был nginx, которому присвоено другое значение, и это также может быть случай, который я описал. Просто указываю на это. Также, если вы читаете другие ответы, не используйте
set_init('memory_limit',-1)
НИКОГДА.Я видел своего разработчика, который использовал это для тестирования оптимизации запросов MySQL, и сценарий достиг оперативной памяти в 35 гигабайт, которая продолжала увеличиваться до тех пор, пока я не убил ее через 10 минут. Просто установите значение на приемлемый порог, пока не доберетесь до рабочей точки и не оставите ее там, или исправьте значения или параметр перспективы. User.ini / fpm.conf /ascgi.
источник
Это определенно будет работа.
источник
Это сбило меня с толку при установке из архива вместо composer для magento 2.3. В моем случае настройки, которые я менял, были не в том месте.
Обновлялся:
vi /etc/php/7.2/cli/php.ini
необходимо обновить:
vi /etc/php/7.2/apache2/php.ini
Это для обеих ошибок, таких как:
а также
Также обязательно включите перезапись:
a2enmod rewrite
если возникают проблемы со страницами.источник