Magento Tipp3: Ein Fix für den Fix - Speicherlecks in Magento

Ein umfangreicher Produktdatenimport unter Magento hat manchmal seine Tücken. Schlimmstenfalls droht der Abbruch des Imports. Das kann zum Beispiel an einer Überlastung des Arbeitsspeichers liegen - und lässt sich vermeiden.

Die Vorgeschichte: Visions Fix für das Speicherleck in Magento

Bereits im Juli letzten Jahres veröffentlichte Sebastian Heuer von der Hannoveraner Internetagentur Visions einen Fix für den Produktdatenimport unter Magento. Er beschrieb das Problem folgendermaßen:

"Daher kommen insbesondere bei großen Shops indi[vid]uelle Schnittstellen zum Einsatz, die entweder direkt innerhalb von Magento oder über die API arbeiten. Aufgrund eines Speicherlecks im Magento Core führt der Import großer Datenmengen auf diesem Weg allerdings schnell dazu, dass der zur Verfügung stehende Arbeitsspeicher vollläuft und der Import abbricht."

In seinem Blogbeitrag stellte Sebastian Heuer dann dankenswerterweise den von ihm entwickelten Bugfix vor. Leider kam der Fall damit noch nicht zum Abschluss: Nach der Implementierung traten bei mehreren Nutzern Schwierigkeiten mit der Bestellverarbeitung auf (nachzulesen u.a. in den Kommentaren zu Johannes Teitges Post "Speicherverbrauch reduzieren"). Nun habe ich eine Lösung gefunden, mit der sich die unerwünschten Folgen des Fixes vermeiden lassen:

Mit dem Fix für den Fix die Speicherlecks in Magento ohne weitere Schwierigkeiten beheben

Die Grundidee ist es, den Fix für das Speicherleck an- und ausschalten zu können. Denn wie oben angegeben bringt der Fix im normalen Betrieb Probleme mit sich und wird für normale Seitenaufrufe auch nicht unbedingt benötigt. Probleme macht das Speicherleck eigentlich nur bei Stapelverabeitungen, die in der Regel über einen Cronjob oder die Shell ausgeführt werden. Um den von Visions entwickelten Fix in diesem Fall nutzen zu können, habe ich mir Folgendes überlegt:

Zuerst wenden wir den Fix wie im Original-Beitrag beschrieben an, nur dass wir überall eine zusätzliche If-Bedingung einbauen:

Datei: app/code/core/Mage/Eav/Model/Entity/Attribute/Abstract.php
Nach der Funktion

protected function _construct()
{

}

den folgenden Code eintragen:

public function __destruct() {   
   if(Mage::registry('is_import_mode')){          
      unset($this->_backend);   
   }
}

Datei: app/code/core/Mage/Eav/Model/Entity/Abstract.php
Suchen Sie nach

catch (Exception $e) {   
   $exception = new Mage_Eav_Model_Entity_Attribute_Exception($e->getMessage());  
   $exception->setAttributeCode($attrCode)->setPart($part);   
   throw $exception;
}

und fügen Sie darunter folgenden Code ein:

if(Mage::registry('is_import_mode')){  
   $attribute->__destruct(); 
}

Suchen Sie auch nach

elseif (!$attribute->isValueEmpty($v)) {   
   $insert[$attrId] = $v;
}

und fügenden Sie folgenden Code ein:

if(Mage::registry('is_import_mode')){   
   $this->unsetAttributes();
}

Nun ist es möglich den Fix im Import-Script anzuschalten:

Mage::register('is_import_mode',true,true);

So ist der Fix nur für den Import "scharf geschaltet". Die von anderen Magento-Benutzern berichteten Fehler beim Bestellablauf können folglich nicht mehr auftreten.

Autor: Kategorie: E-Commerce
Schlagwörter: Magento, Wissen
YTo2OntzOjY6ImZldXNlciI7aTowO3M6MzoicGlkIjtpOjk2O3M6MzoiY2lkIjtpOjEwOTYxMjQyNDtzOjQ6ImNvbmYiO2E6MTA6e3M6MTA6InN0b3JhZ2VQaWQiO2k6MTI0O3M6MTQ6ImV4dGVybmFsUHJlZml4IjtzOjExOiJ0eF9uZXdzX3BpMSI7czoxMzoiVXNlckltYWdlU2l6ZSI7aToxODtzOjk6ImFkdmFuY2VkLiI7YToxOntzOjIxOiJzaG93Q291bnRDb21tZW50Vmlld3MiO2k6MDt9czo4OiJzaGFyaW5nLiI7YToxOntzOjEyOiJ1c2VTaGFyZUljb24iO047fXM6ODoicmF0aW5ncy4iO2E6Mzp7czoxNjoicmF0aW5nSW1hZ2VXaWR0aCI7aToxMTtzOjE2OiJyZXZpZXdJbWFnZVdpZHRoIjtpOjE2O3M6ODoibW9kZXBsdXMiO3M6NDoiYXV0byI7fXM6NjoidGhlbWUuIjthOjc6e3M6MjY6ImJveG1vZGVsVGV4dGFyZWFMaW5lSGVpZ2h0IjtpOjMwO3M6MjQ6ImJveG1vZGVsVGV4dGFyZWFOYnJMaW5lcyI7aTo0O3M6MTU6ImJveG1vZGVsU3BhY2luZyI7aToxMDtzOjE4OiJib3htb2RlbExpbmVIZWlnaHQiO2k6MjA7czoxODoiYm94bW9kZWxMYWJlbFdpZHRoIjtpOjEzNDtzOjI2OiJib3htb2RlbExhYmVsSW5wdXRQcmVzZXJ2ZSI7aToxO3M6MjI6ImJveG1vZGVsSW5wdXRGaWVsZFNpemUiO2k6MzU7fXM6MTc6InByZWZpeFRvVGFibGVNYXAuIjthOjEwOntzOjE0OiJ0eF9hbGJ1bTN4X3BpMSI7czoxNzoidHhfYWxidW0zeF9pbWFnZXMiO3M6MTU6InR4X2NvbW1lcmNlX3BpMSI7czoyMDoidHhfY29tbWVyY2VfcHJvZHVjdHMiO3M6MTI6InR4X2lyZmFxX3BpMSI7czoxMDoidHhfaXJmYXFfcSI7czoxNToidHhfbWluaW5ld3NfcGkxIjtzOjE2OiJ0eF9taW5pbmV3c19uZXdzIjtzOjk6InR4X3R0bmV3cyI7czo3OiJ0dF9uZXdzIjtzOjExOiJ0dF9wcm9kdWN0cyI7czoxMToidHRfcHJvZHVjdHMiO3M6MjQ6InR4X3dlY3N0YWZmZGlyZWN0b3J5X3BpMSI7czoyNToidHhfd2Vjc3RhZmZkaXJlY3RvcnlfaW5mbyI7czoxMjoidHhfY29tbXVuaXR5IjtzOjg6ImZlX3VzZXJzIjtzOjE5OiJ0eF9jd3Rjb21tdW5pdHlfcGkxIjtzOjg6ImZlX3VzZXJzIjtzOjExOiJ0eF9uZXdzX3BpMSI7czoyNToidHhfbmV3c19kb21haW5fbW9kZWxfbmV3cyI7fXM6MTE6InNob3dVaWRNYXAuIjthOjU6e3M6OToidHhfdHRuZXdzIjtzOjc6InR0X25ld3MiO3M6MTE6InR0X3Byb2R1Y3RzIjtzOjc6InByb2R1Y3QiO3M6MTI6InR4X2NvbW11bml0eSI7czo0OiJ1c2VyIjtzOjE5OiJ0eF9jd3Rjb21tdW5pdHlfcGkxIjtzOjI1OiJhY3Rpb249Z2V0dmlld3Byb2ZpbGUmdWlkIjtzOjExOiJ0eF9uZXdzX3BpMSI7czo0OiJuZXdzIjt9czoxMjoiUmVxdWlyZWRNYXJrIjtzOjE6IioiO31zOjQ6ImxhbmciO3M6MjoiZGUiO3M6MzoicmVmIjtzOjI4OiJ0eF9uZXdzX2RvbWFpbl9tb2RlbF9uZXdzXzI0Ijt9YTo0OntzOjQ6ImNvbmYiO2E6MzU6e3M6MTc6InVzZVdlYnBhZ2VQcmV2aWV3IjtzOjE6IjEiO3M6MjI6InVzZVdlYnBhZ2VWaWRlb1ByZXZpZXciO3M6MToiMSI7czoyMDoid2VicGFnZVByZXZpZXdIZWlnaHQiO3M6MjoiNzAiO3M6MjA6Im1heENoYXJzUHJldmlld1RpdGxlIjtzOjI6IjcwIjtzOjMxOiJ3ZWJwYWdlUHJldmlld0Rlc2NyaXB0aW9uTGVuZ3RoIjtzOjM6IjE2MCI7czozODoid2VicGFnZVByZXZpZXdEZXNjcmlwdGlvbk1pbmltYWxMZW5ndGgiO3M6MjoiNjAiO3M6Mjc6IndlYnBhZ2VQcmV2aWV3Q2FjaGVUaW1lUGFnZSI7czozOiIxODAiO3M6MzM6IndlYnBhZ2VQcmV2aWV3Q2FjaGVUaW1lVGVtcEltYWdlcyI7czoyOiI2MCI7czozMDoid2VicGFnZVByZXZpZXdDYWNoZUNsZWFyTWFudWFsIjtzOjE6IjAiO3M6Mjg6IndlYnBhZ2VQcmV2aWV3TnVtYmVyT2ZJbWFnZXMiO3M6MjoiMTAiO3M6Mzg6IndlYnBhZ2VQcmV2aWV3U2Nhbk1pbmltYWxJbWFnZUZpbGVTaXplIjtzOjQ6IjE1MDAiO3M6MzA6IndlYnBhZ2VQcmV2aWV3U2Nhbk1pbkltYWdlU2l6ZSI7czoyOiI0MCI7czozMDoid2VicGFnZVByZXZpZXdTY2FuTWF4SW1hZ2VTaXplIjtzOjM6IjQ1MCI7czoyOToid2VicGFnZVByZXZpZXdTY2FuTWluTG9nb1NpemUiO3M6MjoiMzAiO3M6MzE6IndlYnBhZ2VQcmV2aWV3U2Nhbk1heEltYWdlU2NhbnMiO3M6MjoiNDAiO3M6Mzg6IndlYnBhZ2VQcmV2aWV3U2Nhbk1heEltYWdlU2NhbnNGb3JMb2dvIjtzOjI6IjU1IjtzOjQwOiJ3ZWJwYWdlUHJldmlld1NjYW5NYXhIb3J6aXpvbnRhbFJlbGF0aW9uIjtzOjI6IjU7IjtzOjM3OiJ3ZWJwYWdlUHJldmlld1NjYW5tYXh2ZXJ0aWNhbHJlbGF0aW9uIjtzOjE6IjMiO3M6MzA6IndlYnBhZ2VQcmV2aWV3U2NhbkxvZ29QYXR0ZXJucyI7czoxMDoibG9nbyxjcmdodCI7czozODoid2VicGFnZVByZXZpZXdTY2FuRXhjbHVkZUltYWdlUGF0dGVybnMiO3M6NTc6InBpeGVsdHJhbnMsc3BhY2VyLHlvdXR1YmUscmNsb2dvcyx3aGl0ZSx0cmFuc3BhLGJnX3RlYXNlciI7czozODoid2VicGFnZVByZXZpZXdEZXNjcmlwdGlvblBvcnRpb25MZW5ndGgiO3M6MjoiNDAiO3M6MjU6IndlYnBhZ2VQcmV2aWV3Q3VybFRpbWVvdXQiO3M6NDoiNzAwMCI7czoxMjoidXNlUGljVXBsb2FkIjtzOjE6IjAiO3M6MTI6InVzZVBkZlVwbG9hZCI7czoxOiIwIjtzOjEzOiJwaWNVcGxvYWREaW1zIjtzOjM6IjEwMCI7czoxNjoicGljVXBsb2FkTWF4RGltWCI7czozOiI4MDAiO3M6MTY6InBpY1VwbG9hZE1heERpbVkiO3M6MzoiOTAwIjtzOjIyOiJwaWNVcGxvYWRNYXhEaW1XZWJwYWdlIjtzOjM6IjQ3MCI7czoyMzoicGljVXBsb2FkTWF4RGltWVdlYnBhZ2UiO3M6MzoiMzAwIjtzOjIwOiJwaWNVcGxvYWRNYXhmaWxlc2l6ZSI7czo0OiIyNTAwIjtzOjIwOiJwZGZVcGxvYWRNYXhmaWxlc2l6ZSI7czo0OiIzMDAwIjtzOjE4OiJzb3VuZGNsb3VkQ2xpZW50SUQiO3M6MDoiIjtzOjIyOiJzb3VuZGNsb3VkQ2xpZW50U2VjcmV0IjtzOjA6IiI7czoyMDoidXNlVG9wV2VicGFnZVByZXZpZXciO3M6MDoiIjtzOjI0OiJ0b3BXZWJwYWdlUHJldmlld1BpY3R1cmUiO2k6MDt9czoxMToiYXdhaXRnb29nbGUiO3M6Mjg6IldhcnRlIGF1ZiBBbnR3b3J0IHZvbiBHb29nbGUiO3M6ODoidHh0aW1hZ2UiO3M6MTM6IkJpbGQgZ2VmdW5kZW4iO3M6OToidHh0aW1hZ2VzIjtzOjE1OiJCaWxkZXIgZ2VmdW5kZW4iO30%3DYTowOnt9YTowOnt9YTo3OntzOjE2OiJjb21tZW50TGlzdEluZGV4IjthOjE6e3M6MzE6ImNpZHR4X25ld3NfZG9tYWluX21vZGVsX25ld3NfMjQiO2E6MTp7czoxMDoic3RhcnRJbmRleCI7aToxNTt9fXM6MTQ6ImNvbW1lbnRzUGFnZUlkIjtpOjk2O3M6MTY6ImNvbW1lbnRMaXN0Q291bnQiO2k6MTA5NjEyNDI0O3M6MTI6ImFjdGl2ZWxhbmdpZCI7aTowO3M6MTc6ImNvbW1lbnRMaXN0UmVjb3JkIjtzOjI4OiJ0eF9uZXdzX2RvbWFpbl9tb2RlbF9uZXdzXzI0IjtzOjEyOiJmaW5kYW5jaG9yb2siO3M6MToiMCI7czoxMjoibmV3Y29tbWVudGlkIjtOO30%3D YTo1OntzOjExOiJleHRlcm5hbFVpZCI7aToyNDtzOjEyOiJzaG93VWlkUGFyYW0iO3M6NDoibmV3cyI7czoxNjoiZm9yZWlnblRhYmxlTmFtZSI7czoyNToidHhfbmV3c19kb21haW5fbW9kZWxfbmV3cyI7czo1OiJ3aGVyZSI7czoxNjk6ImFwcHJvdmVkPTEgQU5EIGV4dGVybmFsX3JlZj0ndHhfbmV3c19kb21haW5fbW9kZWxfbmV3c18yNCcgQU5EIHBpZD0xMjQgQU5EIHR4X3RvY3RvY19jb21tZW50c19jb21tZW50cy5kZWxldGVkPTAgQU5EIHR4X3RvY3RvY19jb21tZW50c19jb21tZW50cy5oaWRkZW49MCBBTkQgcGFyZW50dWlkPTAiO3M6MTA6IndoZXJlX2RwY2siO3M6MTM4OiJleHRlcm5hbF9yZWY9J3R4X25ld3NfZG9tYWluX21vZGVsX25ld3NfMjQnIEFORCBwaWQ9MTI0IEFORCB0eF90b2N0b2NfY29tbWVudHNfY29tbWVudHMuZGVsZXRlZD0wIEFORCB0eF90b2N0b2NfY29tbWVudHNfY29tbWVudHMuaGlkZGVuPTAiO30%3D YToyOntpOjA7czoxNDk6IjxpbWcgc3JjPSIvdHlwbzNjb25mL2V4dC90b2N0b2NfY29tbWVudHMvcmVzL2Nzcy90aGVtZXMvdHVkb2NrL2ltZy9wcm9maWxlLnBuZyIgY2xhc3M9InR4LXRjLXVzZXJwaWMgdHgtdGMtdWltZ3NpemUiIHRpdGxlPSIiICBpZD0idHgtdGMtY3RzLWltZy0iIC8%2BIjtpOjk5OTk5O3M6MTUxOiI8aW1nIHNyYz0iL3R5cG8zY29uZi9leHQvdG9jdG9jX2NvbW1lbnRzL3Jlcy9jc3MvdGhlbWVzL3R1ZG9jay9pbWcvcHJvZmlsZWYucG5nIiBjbGFzcz0idHgtdGMtdXNlcnBpY2YgdHgtdGMtdWltZ3NpemUiIHRpdGxlPSIiICBpZD0idHgtdGMtY3RzLWltZy0iIC8%2BIjt9
Bitte bestätigen Sie
Nein
Ja
Information
Ok
Vorschau wird geladen ...
* Pflichtfeld
Ihr Kommentar ist eine Antwort auf den folgenden Kommentar

Wir behalten uns vor, Kommentare zu löschen, beispielsweise wenn sich diese nicht auf den Beitrag beziehen, zur Eigenwerbung missbraucht werden, persönliche Daten anderer enthalten, diskriminieren, beleidigen oder Rechte verletzen.

Datenschutzhinweis: Wenn Sie einen Kommentar oder sonstigen Beitrag in unserem Blog hinterlassen, speichern wir neben Ihren Angaben Ihre IP-Adresse. Darüber hinaus können Sie die Beiträge und Kommentare unseres Blogs abonnieren. Das Kommentarabonnement können Sie jederzeit abbestellen. Weitere Informationen finden Sie in unserer Datenschutzerklärung.

E-Commerce & Webentwicklung: Wir realisieren und optimieren Internetprojekte. Unser Fachgebiet sind Onlineshops, Rich Internet Applications und anspruchsvolle Onlineauftritte. Über unsere Arbeit schreiben wir. Hier im Blog von TUDOCK.