PHP 5.6 verbraucht mehr Speicher als PHP 5.4

Hab heute von 3.4 auf die obige Version umgestellt.
Die heftigen Umlaut-Probleme bekomme ich langsam in den Griff, aber nicht den fogenden bombastischen Fehler:

Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 45 bytes) in [CONFIG\StrukturDefinitionen\DefSemap] on line 187

Umgebung:
Habe ein Skript, das per Ping mein LAN überprüft; ein Loop wird mehrfach bis zu 6x ausgeführt; gab unter 3.4 nie Probleme.

Unter der Version 4.0 knallt es bereits in der 2ten Runde nach ca. 30 Sekunden mit dem obigen Fehler.

Der Fehler tritt in einer function auf, die bereits mehrfach vor dem Speicherüberlauf aufgerufen wurde. Hier ein Auszug:

...
            //$Liste = array_merge (IPS_GetCategoryList (), IPS_GetInstanceList ());    // oder es handelt sich um eine Instanz
            $Liste = IPS_GetCategoryList ();    // betrachte wg. Speichermangel nur Kategorien
            $ParentId = false;
            foreach ($Liste as $ID) {
                if (IPS_GetObject ($ID)['ObjectIdent'] == $Obj[0]) {          // das ist "line 187"
                    $ParentId = $ID;
                    break;
                }
            }

...

Wenn ich statt der Befehlszeile mit der IPS_GetCategoryList die darüberliegende auskommentierte Befehlszeile mit dem array_merge verwende, tritt der Fehler früher auf.

Fehler bekannt? Abhilfe durch eine Version aus 4.1 ?

Viele Grüsse
Harald

Weitere Infos:
Windows 7 Ultimate
Hersteller HP
Modell ProLiant MicroServer
Gesamter Systemspeicher 2,00 GB RAM
Systemtyp 64 Bit-Betriebssystem
Anzahl der Prozessorkerne 2

Vermutlich hattest du in der 3.4 in der php.ini den max. Speicher höher festgelegt.
Per default ist das immer 32MB (memory_limit=32M).

Alternativ das Script etwas umbauen, das es nicht so viel Speicher verschlingt.

Für die Umlaute gibt es in der 4.1 ein Hilfsmittel :wink:

Michael

Die aus PHP bekannte „php.ini“ ( php.net/manual/de/ini.php ) ist in IP-Symcon ebenfalls vorhanden. IP-Symcon konfiguriert dabei die “extension” Einträge automatisch, anhand der vorhandenen Erweiterungen, die im “IP-Symcon/ext” Ordner abgelegt wurden.

Die hab ich jetzt im IPS-Directory gefunden:


```php

max_execution_time=600
error_reporting=E_ALL
register_globals=off
memory_limit=32M

short_open_tag=1
...

Geändert habe ich daran nichts bei der Umstellung von 3.4 auf 4.0
Ich gehe mal auf 64M

Wie soll ich denn „das Script etwas umbauen, das es nicht so viel Speicher verschlingt“ ?

Da ist das Hauptskript, das mehrere modulare Includes hat, und in einem davon ist die function.
Hat unter 3.4 nie Probleme gemacht.

Vielen Dank erst mal für den Tip. Melde mich bei Nichterfolg zurück.

Viele Grüße
Harald

Crasht mit 64M ein bißchen anders:

Fatal error:  Allowed memory size of 67108864 bytes exhausted (tried to allocate 1 bytes) in D:\IPS-Steigerts\scripts\DefSemap.inc.php on line 187

Kam von IP-Symcon 4.00, 20.10.2016, b2a4a4949374 Speicherüberlauf

Da es eigentlich nicht schlimmer werden kann, hab ich heute auf die o.g. 4.1 über den Beta-Kanal updedated:

16:18:32 | 28159 | ERROR   | ScriptEngine         | Ergebnis für Skript 28159

Skript 'LAN-Scanner' gestartet
Mo 07.11.16-16:18:00 28159 gestartet
Loop Mo 07.11.16-16:18:00   00:00:00    EndLoop Mo 07.11.16-16:18:22   00:00    
Loop Mo 07.11.16-16:18:22   00:00:22    EndLoop Mo 07.11.16-16:18:32   00:01    
Loop Mo 07.11.16-16:18:32   00:00:32    <br />
<b>Fatal error</b>:  Allowed memory size of 67108864 bytes exhausted (tried to allocate 24 bytes) in <b>D:\IPS-Steigerts\scripts\DefSemap.inc.php</b> on line <b>187</b><br />

Info: die Ausgaben vor der Crash-Meldung werden durch print(); (Trace-Marken) innerhalb des Skriptes erzeugt um einen Anhalt über den Ablauf zu haben.

Dann wollte ich zumindest meine Umlautprobleme beseitigen mit dem
Assistent zum Validieren auf UTF-8 Konformität (über Utils Control) (Bitte Settings + Skripte sichern!)

16412 /[Utils Handler]/ geöffnet: „Konfiguration ist gültig und gespeichert“ gesehen

Und einen Button „Fix Encoding“

Draufgeklickt und ein Fenster mit Bäng: „Kann Spezialformular UtilControlFixEncoding nicht finden“

Hab ich was übersehen?

Meine php.ini steht unverändert auf 64MB:


```php

max_execution_time=600
error_reporting=E_ALL
register_globals=off
memory_limit=64M
auto_prepend_file="D:\IPS-Steigerts\scripts\__autoinclude.inc.php"
short_open_tag=1
...

und der Thread Count wieder auf 10 (wie bei 3.4) und trotzdem Speicherüberlauf.

Hat noch jemand einen Rat für mich ??
Wie gesagt, das Skript lief auf 3.4 seit Monaten völlig problemlos.

Viele Grüsse
Harald

Ich kann dir leider nicht sagen, warum PHP mehr Speicher verbraucht. Seit der 3.4 haben wir von PHP 5.4 auf PHP 5.6 gewechselt. Somit ist dies leider ein generelles PHP Problem und nichts, dass ich beeinflussen oder gar korrigieren kann. Ich würde nach und nach versuchen das Skript zu reduzieren bis der Fehler nicht kommt, um die Ursache zu finden. Wie gesagt: Ich kann da leider nichts tun.

Die Fehlermeldung in der Konsole liegt daran, dass du eine alte Konsole nutzt. Wenn am Anfang die Sicherheitsmeldung kommt, hast du bestimmt Ignorieren gedrückt. Das tut man nicht einfach so :smiley:

paresy