Ich habe eine Reihe von POS-Systemen (Point of Sale), die regelmäßig neue Verkaufsdaten an eine zentrale Datenbank senden, die die Daten in einer großen Datenbank zur Berichterstellung speichert.
Der Client POS basiert auf PHPPOS, und ich habe ein Modul implementiert, das die Standard-XML-RPC-Bibliothek verwendet, um Verkaufsdaten an den Dienst zu senden. Das Serversystem ist auf CodeIgniter aufgebaut und verwendet die XML-RPC- und XML-RPCS-Bibliotheken für die Webservice-Komponente. Immer wenn ich viele Verkaufsdaten sende (nur 50 Zeilen aus der Verkaufstabelle und einzelne Zeilen aus sales_items, die sich auf jeden Artikel innerhalb des Verkaufs beziehen), erhalte ich den folgenden Fehler:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 54 bytes)
128M ist der Standardwert in php.ini
, aber ich nehme an, dass das eine große Zahl ist, die man nicht überschreiten kann. Ich habe sogar versucht, diesen Wert auf 1024M zu setzen, und alles, was es tut, ist, eine längere Zeit bis zum Fehler zu brauchen.
Was die Schritte angeht, die ich unternommen habe, so habe ich versucht, alle Verarbeitungen auf der Serverseite zu deaktivieren, und ich habe es so eingerichtet, dass es unabhängig von der Eingabe eine vorgefertigte Antwort zurückgibt. Ich glaube jedoch, dass das Problem in der tatsächlichen Übermittlung der Daten liegt. Ich habe sogar versucht, die maximale Skriptausführungszeit für PHP zu deaktivieren, und es tritt immer noch ein Fehler auf.
Es ist sehr einfach, Speicherlecks in einem PHP-Skript zu bekommen - vor allem, wenn Sie eine Abstraktion, wie z.B. ein ORM, verwenden. Versuchen Sie, mit Xdebug ein Profil Ihres Skripts zu erstellen und herauszufinden, wo der ganze Speicher hin ist.