Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
#51 02. April 2013 16:33
- faglork
- arbeitet mit CMS/ms
- Ort: Fränkische Schweiz
- Registriert: 15. Dezember 2010
- Beiträge: 1.152
- Webseite
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Klenkes schrieb:Ich betreue auch eine Website mit ca. 500 Seiten im Katalogstil in 4 Ebenen tief, und die Seite läuft stinknormal unter Shared Hosting mit max_exec 10s, und mit, ich glaube, 32MB Speicher.
Klar, alles nicht unter 1 Sekunde, aber annehmbar.Muss mich selbst nochmal korrigieren.
Es stehen 64MB Speicher zur Verfügung.Von den momentan über 600 Seiten sind praktisch alle als Contentpage(Cataloger) angelegt, was das Backend zwar unübersichtlich macht, aber immer noch "händelbar"
Memoryfehler hatten wir bis jetzt noch nicht.
Dito hier. 30s, 64M, ca 600 Seiten.
Das größte Problem bei sowas ist das Anlegen neuer Seiten. Das Auswählen der übergeordneten Seite aus einer Liste mit 600 Einträgen ist einfach besch... wenn es wenigstens so gelöst wäre wie bei der "Internen Seitenverlinkung" im TinyMCE (so zum Ausklappen). Und wenns dann noch mehrsprachig ist und man die Bäume synchron aufbauen muss ... igitt.
Servus,
Alex
Offline
#52 11. April 2013 12:53
- mike-r
- arbeitet mit CMS/ms
- Registriert: 21. Dezember 2010
- Beiträge: 898
- Webseite
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Der Hoster der Wahl bietet seit neuestem für 6€/p.a. zusätzliche 32MB Ram an, das ist erst mal ein Weg, den ich gehen werde, am eigentlichen Problem selbst ändert das nichts, wer sagt mir, dass ich in 2 Jahren nicht weitere 32MB brauche ...
So.
Ich hab jetzt 72MB. Läuft alles, bis auf das wichtigste: Seiten bearbeiten:
Fatal error: Allowed memory size of 75497472 bytes exhausted (tried to allocate 122880 bytes) in /home/www/.../html/lib/smarty/sysplugins/smarty_internal_compile_foreach.php on line 128
Interessanterweise läuft es, wenn ich das Menü im Template deaktiviere. Den Seitenbaum sehe ich beim Bearbeiten trotzdem.
Nanu?
Menüaufruf:
{menu template='simple_navigation.tpl' collapse='1'}
Die Menüverwaltung kann ich nicht öffnen:
Fatal error: Call to a member function MoveNext() on a non-object in /home/www/.../html/lib/classes/module_support/modtemplates.inc.php on line 47
da hab ich ja erst mal einen Ansatz wo weiterzusuchen ist.
Oder jemand auf die Schnelle ne Idee, wie ich das korrigiere?
Unablässige Tools für's Webdevelopement/ Fehlerfindung: CSS Validierungsservice, Bildschirmlineal, Firebug, Tidy, Deutsche CSS-Referenz
Offline
#53 11. April 2013 13:42
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.437
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Wenn die Anzeige im Backend unter "Inhalte->Seiten" davon abhängig ist, ob das Menü im Frontend-Template steht oder nicht, dann bedeutet das, dass das Template geparst/verarbeitet wird, während der Seitenbaum erstellt wird. Und das bedeutet ... nutzt Du AdvancedContent? Wenn ja, welche CMS/AC Version und nutzt Du die erweiterten Einstellungen des Moduls? (der Tab "erweiterte Einstellungen" beim Bearbeiten von Seiten, wo man z.B. Start/End-Datum angeben kann)
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#54 11. April 2013 15:50
- mike-r
- arbeitet mit CMS/ms
- Registriert: 21. Dezember 2010
- Beiträge: 898
- Webseite
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Nein, es werden ausschliesslich Inhaltsseiten genutzt.
Module habe ich gerade komplett bis auf Menümanager deaktiviert -> keine Änderung.
Edit: Inhalte-> Seiten funktioniert (solange ich sie nicht komplett aufklappe), das bearbeiten der Seiten schlägt dann aber mit obiger Meldung fehl.
Edit² CMS und Module sind alle die aktuellste Version.
Edit³: das Menumanager-problem kommt scheinbar nicht mehr aus dem Seitenbaum, ich habe gerade lokal grosszügig rumgelöscht, und es besteht weiterhin.
Beitrag geändert von mike-r (11. April 2013 16:31)
Unablässige Tools für's Webdevelopement/ Fehlerfindung: CSS Validierungsservice, Bildschirmlineal, Firebug, Tidy, Deutsche CSS-Referenz
Offline
#55 11. April 2013 16:42
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.437
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Edit: Inhalte-> Seiten funktioniert (solange ich sie nicht komplett aufklappe), das bearbeiten der Seiten schlägt dann aber mit obiger Meldung fehl.
Ist ja auch logisch. Und ein alter Hut.
Zu viele anzuzeigende Seiten -> Memory-Problem.
Zusammenklappen aller Seiten -> Lösung für die Inhaltsübersicht.
Beim Bearbeiten einer Seite werden aber wieder alle Seiten für das Dropdown "Übergeordnete Seite" geladen -> Wieder Memory-Problem
Das MenüManager-Problem kann ich gerade nicht nachvollziehen (bin unterwegs).
Klingt aber nach einem Programmierfehler bzw. danach, dass nicht geprüft wird, ob eine bestimmte Aktion erfolgreich war, bevor man fortfährt. Die Frage ist, warum diese Aktion nicht das gewünschte Objekt liefert, um die Funktion MoveNext() ausführen zu können.
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#56 11. April 2013 17:11
- Klenkes
- Server-Pate
- Ort: 89428 Syrgenstein
- Registriert: 17. Dezember 2010
- Beiträge: 1.437
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Nein, es werden ausschliesslich Inhaltsseiten genutzt.
Edit: Inhalte-> Seiten funktioniert (solange ich sie nicht komplett aufklappe), das bearbeiten der Seiten schlägt dann aber mit obiger Meldung fehl.
Ich kann nur einen Eigencheck anbieten.
620 Inhaltsseiten, davon 610 untehalb 1 Toplevelmenüpunktes.
Das Aufklappen aller Punkte klappt bei mir mit 64MB problemlos.
Ich denke auch, dass der Fehler eher woanders liegt, als an der schieren Menge der Seiten.
Offline
#57 11. April 2013 20:36
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
(u.a. auf der myaccount.php, wozu will die den Seitenbaum ziehen?)
Eher anders herum, der Zustand des Seitenbaums wird benutzerspezifisch gespeichert.
Jetzt ist die grosse Quizfrage, ob ich auf Verdacht die Struktur von gefühlt auch 500 Seiten komplett rumschieben muss, oder ob es eine andere Lösung für 48MB gibt?
Tritt/trat dies auch mit einem neuen Benutzer auf?
Offline
#58 12. April 2013 23:31
- mike-r
- arbeitet mit CMS/ms
- Registriert: 21. Dezember 2010
- Beiträge: 898
- Webseite
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Klingt aber nach einem Programmierfehler bzw. danach, dass nicht geprüft wird, ob eine bestimmte Aktion erfolgreich war, bevor man fortfährt.
Dafür spricht, dass ich eine ähnliche Fehlermeldung im Netz gefunden habe zu irgendeinem Joomla-Plugin, wo ein "if !empty" oder dergleichen fehlte (Bin kein Programmierer und den Link habe ich um die Uhrzeit auch nicht mehr parat )
Ich kann nur einen Eigencheck anbieten.
620 Inhaltsseiten, davon 610 untehalb 1 Toplevelmenüpunktes.
Danke, hilft mir leider nicht, da bei mir alles bunt zerwürfelt ist.
Btw: Wie zählst Du die Seiten?
Ich denke auch, dass der Fehler eher woanders liegt, als an der schieren Menge der Seiten.
Ja denke ich auch. Ich befürchte ich habe bei Ex- und Import etwas falsch gemacht - oder im schlimmsten Falle ist die Original-DB schon "kaputt" und ältere CMSe haben das noch toleriert.
@cyberman das Problem tritt auch mit einem _anderen_ Benutzer auf. Einen _neuen_ teste ich morgen (also heute).
Danke an alle für die Unterstützung bisher.
Beitrag geändert von mike-r (12. April 2013 23:34)
Unablässige Tools für's Webdevelopement/ Fehlerfindung: CSS Validierungsservice, Bildschirmlineal, Firebug, Tidy, Deutsche CSS-Referenz
Offline
#59 12. April 2013 08:34
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Das Problem hatten wir vor langer Zeit in einem der Foren (weiß nur nicht mehr, in welchem
) und da gabs auch eine Lösung. Kann den Thread aber gerade nicht mehr finden.
Aber irgend wie war mir, als ob damals eine Änderung in der DB Abhilfe geschaffen hätte, indem das Feld, wo der (geöffnete) Seitenbaum gespeichert wird, von TEXT auf auf MEDIUM TEXT geändert wurde
...
OK, habs gefunden und hier publiziert.
Aber du hast das Problem ja zwischenzeitlich durch die Speichererhöhung anderweitig gelöst ...
Offline
#60 15. April 2013 21:25
- mike-r
- arbeitet mit CMS/ms
- Registriert: 21. Dezember 2010
- Beiträge: 898
- Webseite
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Noch jemand ne Idee, wie ich das menumanager/ movenext-problem lösen kann?
Gerade mal eine ältere Menumanager-version probiert, bekomme ich keine Fehlermeldung, allerdings auch nur die Tabs angezeigt (soweit komme ich mit der 1.8.5 nicht)
Ich habe leider keine Version zwischen 1.4 und 1.8.5, die 1.7.x hat nicht zufällig wer rumliegen und kann sie mir geben? Im Forge ist sie nicht.
Beitrag geändert von mike-r (15. April 2013 21:42)
Unablässige Tools für's Webdevelopement/ Fehlerfindung: CSS Validierungsservice, Bildschirmlineal, Firebug, Tidy, Deutsche CSS-Referenz
Offline
#61 16. April 2013 07:40
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.437
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Ich habe leider keine Version zwischen 1.4 und 1.8.5, die 1.7.x hat nicht zufällig wer rumliegen und kann sie mir geben? Im Forge ist sie nicht.
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#62 16. April 2013 08:23
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Ich vermute mal, dass die MM-Version gemeint war ...
Offline
#63 16. April 2013 10:02
- Cherry
- arbeitet mit CMS/ms
- Registriert: 15. Dezember 2010
- Beiträge: 529
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Ich habe leider keine Version zwischen 1.4 und 1.8.5, die 1.7.x hat nicht zufällig wer rumliegen und kann sie mir geben? Im Forge ist sie nicht.
MM1.7.7 war in CMSms 1.10.1 mitgeliefert. Das müßstest doch von dort nehmen können.
Offline
#64 16. April 2013 20:08
- mike-r
- arbeitet mit CMS/ms
- Registriert: 21. Dezember 2010
- Beiträge: 898
- Webseite
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Danke, hab jetzt ein paar durchprobiert -> keine Änderung.
Ich werde jetzt nochmal von vorne anfangen und zusehen, ob ich das Schritt für Schritt updaten kann, bis ich den Fehler hoffentlich finde.
Unablässige Tools für's Webdevelopement/ Fehlerfindung: CSS Validierungsservice, Bildschirmlineal, Firebug, Tidy, Deutsche CSS-Referenz
Offline
#65 16. April 2013 21:05
- czarnowski
- kennt CMS/ms
- Registriert: 18. Oktober 2012
- Beiträge: 457
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Ich würde es ,al mit der geänderten Funktion versuchen (in modtemplates.inc.php)
[== PHP ==]
function cms_module_ListTemplates(&$modinstance, $modulename = '')
{
$gCms = cmsms();
$db = $gCms->GetDb();
$config = $gCms->GetConfig();
$retresult = array();
$query = 'SELECT * from '.cms_db_prefix().'module_templates WHERE module_name = ? ORDER BY template_name ASC';
$result =& $db->Execute($query, array($modulename != ''?$modulename:$modinstance->GetName()));
while (!empty($result) && is_object($result) && !$result->EOF)
{
$retresult[] = $result->fields['template_name'];
$result->MoveNext();
}
return $retresult;
}
Offline
#66 16. April 2013 21:58
- mike-r
- arbeitet mit CMS/ms
- Registriert: 21. Dezember 2010
- Beiträge: 898
- Webseite
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Bingo, danke, bringt mich einen Schritt weiter, der Menümanager läuft.
Bzw. ... leider auch wieder 2 Schritte zurück, ich bin endlich wieder im Topic
Meine 72MB Ram reichen immer noch nicht und ich bin wieder am Anfang. Komischerweise lief das Seiten bearbeiten auf meinem (mittlerweile verfrickelten) 64MB-Testsystem. es ist zum Verzweifeln.
Edit: gibt es denn nicht irgendeine Möglichkeit, das rendern von {menu} im Backend abzustellen? Ich verstehe das nicht, dass der Seitenbaum trotzdem da ist ... wozu brauche ich das dann da?
Beitrag geändert von mike-r (17. April 2013 22:04)
Unablässige Tools für's Webdevelopement/ Fehlerfindung: CSS Validierungsservice, Bildschirmlineal, Firebug, Tidy, Deutsche CSS-Referenz
Offline
#67 17. April 2013 05:15
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
cyberman schrieb:Aber irgend wie war mir, als ob damals eine Änderung in der DB Abhilfe geschaffen hätte, indem das Feld, wo der (geöffnete) Seitenbaum gespeichert wird, von TEXT auf auf MEDIUM TEXT geändert wurde
...
OK, habs gefunden und hier publiziert.
Hattest du dies gecheckt?
Offline
#68 17. April 2013 11:39
- czarnowski
- kennt CMS/ms
- Registriert: 18. Oktober 2012
- Beiträge: 457
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Wenn die für den Aufbau einer Navigation notwendigen Informationen pro Seite im Schnitt deutlich weniger als 100 Bytes pro Seite kann man sich sehr gut vorstellen das selbst wenn man 8MB als Grundbedarf abzieht ein Bedarf über 64 MB oder gar über 70 MB für 500 Seiten extrem überzogen ist .
Die Ursachen sind aus meiner Sicht vielfältig
a. das Menüsystem ist völlig unwirtschaftlich aufgebaut
b. die Konsistenz der Daten ist nicht gesichert
Das aber habe ich bereits vor vielen Jahren geäussert und auch an Beispielen belegt wie man es anders machen kann.
Macht man es anders lassen sich problemlos zig tausende von Seiten halten.
Punkt b lässt sich leicht nachvollziehen betrachten wir einfach einmal den code für ein Seitenupodate:
Mysql über Myisam sperrt bei insert, delete und update die komplette Tabelle für den Moment der SQL Aktion.
*/
protected function Update()
{
$gCms = cmsms();
global $debug_errors;
$db = $gCms->GetDb();
$config = $gCms->GetConfig();
$result = false;
#Figure out the item_order (if necessary)
if ($this->mItemOrder < 1)
{
$query = "SELECT ".$db->IfNull('max(item_order)','0')." as new_order FROM ".cms_db_prefix()."content WHERE parent_id = ?";
$row = $db->GetRow($query,array($this->mParentId));
if ($row)
{
if ($row['new_order'] < 1)
{
$this->mItemOrder = 1;
}
else
{
$this->mItemOrder = $row['new_order'] + 1;
}
}
}
$this->mModifiedDate = trim($db->DBTimeStamp(time()), "'");
$query = "UPDATE ".cms_db_prefix()."content SET content_name = ?, owner_id = ?, type = ?, template_id = ?, parent_id = ?, active = ?, default_content = ?, show_in_menu = ?, cachable = ?, secure = ?, page_url = ?, menu_text = ?, content_alias = ?, metadata = ?, titleattribute = ?, accesskey = ?, tabindex = ?, modified_date = ?, item_order = ?, markup = ?, last_modified_by = ? WHERE content_id = ?";
$dbresult = $db->Execute($query, array(
$this->mName,
$this->mOwner,
strtolower($this->mType),
$this->mTemplateId,
$this->mParentId,
($this->mActive == true ? 1 : 0),
($this->mDefaultContent == true ? 1 : 0),
($this->mShowInMenu == true ? 1 : 0),
($this->mCachable == true ? 1 : 0),
$this->mSecure,
$this->mURL,
$this->mMenuText,
$this->mAlias,
$this->mMetadata,
$this->mTitleAttribute,
$this->mAccessKey,
$this->mTabIndex,
$this->mModifiedDate,
$this->mItemOrder,
$this->mMarkup,
$this->mLastModifiedBy,
$this->mId
));
if (!$dbresult)
{
if (true == $config["debug"])
{
# :TODO: Translate the error message
$debug_errors .= "<p>Error updating content</p>\n";
}
}
if ($this->mOldParentId != $this->mParentId)
{
#Fix the item_order if necessary
$query = "UPDATE ".cms_db_prefix()."content SET item_order = item_order - 1 WHERE parent_id = ? AND item_order > ?";
$result = $db->Execute($query, array($this->mOldParentId,$this->mOldItemOrder));
$this->mOldParentId = $this->mParentId;
$this->mOldItemOrder = $this->mItemOrder;
}
if (isset($this->mAdditionalEditors))
{
$query = "DELETE FROM ".cms_db_prefix()."additional_users WHERE content_id = ?";
$db->Execute($query, array($this->Id()));
foreach ($this->mAdditionalEditors as $oneeditor)
{
$new_addt_id = $db->GenID(cms_db_prefix()."additional_users_seq");
$query = "INSERT INTO ".cms_db_prefix()."additional_users (additional_users_id, user_id, content_id) VALUES (?,?,?)";
$db->Execute($query, array($new_addt_id, $oneeditor, $this->Id()));
}
}
if( is_array($this->_props) && count($this->_props) )
{
// :TODO: There might be some error checking there
$this->_save_properties();
}
else
{
if (true == $config["debug"])
{
# :TODO: Translate the error message
$debug_errors .= "<p>Error updating : the content has no properties</p>\n";
}
}
cms_route_manager::del_static('','__CONTENT__',$this->mId);
if( $this->mURL != '' )
{
$route = CmsRoute::new_builder($this->mURL,'__CONTENT__',$this->mId,null,TRUE);;
cms_route_manager::add_static($route);
}
}
Hier sieht man das bereits die Festlegung von new_order in die Hosen gehen kann, wenn zufällig eine weitere Person da herum rubbelt.
Das würde aber bereits bei der eigentlichen Update Anweisung Konsequenzen haben.
Und die Tabellensperrung der ersten Updateanweisung wird sofort danach wieder aufgehoben - hier könnte bereits der nächste Fehler laufen.
Da in der zweiten möglichen Updateanweisung Werte aus dem ersten verwendet werden haben sich bereits erhebliche Probleme eingeschlichen.
Es werden praktisch keine Fehler mehr nach der ersten Updateanweisung aufgefangen.
Je mehr Seiten, je mehr Backenduser und je höher die Traffic im Frontend ist desto gefährlicher ist das - und - derartige Dinge gibt es x mal.
Beim konkreten Problem hier vermute ich das in Teilbereichen eine Tabellenstörung vorliegt die dazu führt das rekursiv alles zig mal abgeklappert wird bis man einen RAM Überlauf hat.
Da hilft nur genaue Kenntnis und manuelle Durchsicht aller Datensätze.
Offline
#69 17. April 2013 13:07
- mike-r
- arbeitet mit CMS/ms
- Registriert: 21. Dezember 2010
- Beiträge: 898
- Webseite
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
cyberman schrieb:cyberman schrieb:Aber irgend wie war mir, als ob damals eine Änderung in der DB Abhilfe geschaffen hätte, indem das Feld, wo der (geöffnete) Seitenbaum gespeichert wird, von TEXT auf auf MEDIUM TEXT geändert wurde
...
OK, habs gefunden und hier publiziert.
Hattest du dies gecheckt?
Nein, bisher nicht, nun gerade nachgeholt: keine Änderung. (Es geht mir auch gar nicht darum, den kompletten Seitenbaum in der Seitenübersicht zu öffnen, sondern erstmal überhaupt eine Seite (über den eingeklappten oder nur teilweise geöffneten) zu bearbeiten)
Beim konkreten Problem hier vermute ich das in Teilbereichen eine Tabellenstörung vorliegt die dazu führt das rekursiv alles zig mal abgeklappert wird bis man einen RAM Überlauf hat.
Würde ich nicht ausschliessen, meine cms_content_props hat 25MB (vs max 2MB in allen anderen Tabellen), kann mal bitte jemand mit vielen Seiten nachschauen, wie gross die da ist?
Edit: Die content_props ist für die Seiteninhalte zuständig, sehe ich das richtig? Die würde das Problem wahrscheinlich nicht verursachen. Oder wo genau liegt der Seitenbaum?
Beitrag geändert von mike-r (17. April 2013 13:23)
Unablässige Tools für's Webdevelopement/ Fehlerfindung: CSS Validierungsservice, Bildschirmlineal, Firebug, Tidy, Deutsche CSS-Referenz
Offline
#70 17. April 2013 15:53
- czarnowski
- kennt CMS/ms
- Registriert: 18. Oktober 2012
- Beiträge: 457
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Wie man an der geposteten Funktion erkennen kann liegen die Informationen in der Tabelle cms_content.
Die kann man sich mit PMA und SQL so ausgeben das man für sich einen sinnvollen Zusammenhang hat.
In content_props stecken die Inhalte.
Offline
#71 17. April 2013 20:31
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Beim konkreten Problem hier vermute ich das in Teilbereichen eine Tabellenstörung vorliegt
Lässt sich so etwas durch ein repair/optimize auf die Tabelle beheben?
Offline
#72 17. April 2013 21:04
- czarnowski
- kennt CMS/ms
- Registriert: 18. Oktober 2012
- Beiträge: 457
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Repair repariert lediglich erkennbare Fehler in der Tabelle selbst.
Ich habe den Verdacht das durch mangelnde Konsistenz der Daten es etwas mit der parent_id wäre.
Es gibt die Funktion
public static function load_from_list($data,$parent_id = -1,cms_content_tree &$tree = null)
{
for( $i = 0; $i < count($data); $i++ )
{
$row = $data[$i];
if( $row['parent_id'] < $parent_id ) continue;
if( $row['parent_id'] > $parent_id ) break;
// create a tree object
if( !is_object($tree) )
{
$tree = new cms_content_tree();
}
$node = new cms_content_tree(array('id'=>$row['content_id'],'alias'=>$row['content_alias']));
self::load_from_list($data,$row['content_id'],$node);
$tree->add_node($node);
}
return $tree;
}
}
in class.cms_tree_operations.php die sich u.U. permanent selbst und unendlich aufrufen kann wenn da Operationen bei insert, delete oder update nicht vollständig geklappt haben - also da wäre mein Verdacht.
Zudem würde es den exorbitanten Verbrauch an RAM erklären der zum Abpfiff führt.
Bei einer Durchsicht der Tabelle sollte man sich also die parent_id's manuell vornehmen - ist aber eine Schweinearbeit.
Offline
#73 17. April 2013 21:25
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Die Ursachen sind aus meiner Sicht vielfältig
a. das Menüsystem ist völlig unwirtschaftlich aufgebaut
b. die Konsistenz der Daten ist nicht gesichertDas aber habe ich bereits vor vielen Jahren geäussert und auch an Beispielen belegt wie man es anders machen kann.
Meinst du jetzt damit Pimenu / Powermenu?
Offline
#74 18. April 2013 10:12
- mike-r
- arbeitet mit CMS/ms
- Registriert: 21. Dezember 2010
- Beiträge: 898
- Webseite
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Bei einer Durchsicht der Tabelle sollte man sich also die parent_id's manuell vornehmen - ist aber eine Schweinearbeit.
Ärm, wonach schaue ich da, und in welcher Tabelle?
Ich habe jetzt einmal die cms_content durchgesehen und für mich als Laie sieht da nichts auffällig aus.
Ausser, dass wir nicht von 600 Seiten reden ... sondern von knapp 1500
Unablässige Tools für's Webdevelopement/ Fehlerfindung: CSS Validierungsservice, Bildschirmlineal, Firebug, Tidy, Deutsche CSS-Referenz
Offline
#75 18. April 2013 11:25
- czarnowski
- kennt CMS/ms
- Registriert: 18. Oktober 2012
- Beiträge: 457
Re: Fatal error: Allowed memory size of 33554432 bytes exhausted
Zunächst einmal schauen (in content) ob irgendwo parent_id irgendwo null oder -2 ist.
In dem Fall kommt es zu zusätzlichen Schleifen - die machen bei der Standardinstallation fast 1 MB mehr Speicherbedarf aus nur wenn man eine einzige Seite händisch auf -2 ändert.
In addcontent,php halte ich
$parent_id = get_preference($userid, 'default_parent', -2);
für einen Fehler müsste
$parent_id = get_preference($userid, 'default_parent', -1);
sein
------------
@cyberman
pimenu powermenu sind ja Beispiele aber auch bereits total veraltet.
Heute wäre der Stand der Dinge das man sich entweder die komplette Hierarchie vollständig komplett mit einer einzigen SQL Abfrage holt bzw. Unterpunkte komplett ebenfalls mit einer einzigen Abfrage.
contentcache habe ich schon vor Jahren ersatzlos gestrichen da bei Last unterm Strich es erheblich mehr kostet als es überhaupt bringt.
In den aktuellen kommerziellen Versionen der Nachfolger von Pcms (pcms gibt es nicht mehr als OS) wird längst nested Set verwendet - da wird es noch einfacher.
Beitrag geändert von czarnowski (18. April 2013 11:26)
Offline