Frage zu Speichernutzung / memory exhausted

Hallo zusammen,

dadurch, dass ich jetzt leider öfter auf den Fehler

Allowed memory size of 33554432 bytes exhausted

gestoßen bin, habe ich eine Frage zur Speichernutzung (Ubuntu 14.04 VM, IPS 4.0 aktuellste Version).

Um festzustellen, wo der Speicheranstieg entsteht, habe ich meine Skripte auf ein Minimalbeispiel reduziert.

Gegeben sei folgender Funktionsaufruf:

ipsutil_GetOrCreateLink($deviceDebugContainer, IPS_GetName($device) . ' - ' . IPS_GetObject($datapoint)['ObjectIdent'], $datapoint);

der eine inzwischen komplett auskommentierte Funktion aufruft, die also nichts macht.

Diese Funktion wird in einer for-Schleife mehrfach aufgerufen. Dabei steigt die Speichernutzung mit jedem Aufruf an (ca. Verdopplung bei 100 Aufrufen), gelesen über memory_get_peak_usage(). Irgendwie wird Speicher alleine durch die Zusammenstellung der Funktionsargumente belegt (und scheinbar nicht freigegeben).

Denn als Gegenbeispiel ist beim Aufruf

ipsutil_GetOrCreateLink($deviceDebugContainer, "string", $datapoint);

quasi kein Anstieg der Nutzung festzustellen.

Leider macht mir der Speicher etwas Probleme, weil die Skripte, die bei mir automatisiert Signale, Geräte und Links erzeugen, mit zunehmender Signalmenge immer mehr abbrechen mit dem Speicherfehler.

Gibt es eine Möglichkeit, den Speicher wieder freizugeben? Wo und wie genau kann hier von Aufruf zu Aufruf Speicher belegt bleiben?

Danke und Gruß
micheljarre