Μοιραίο σφάλμα: Εξαντλήθηκε το επιτρεπόμενο μέγεθος μνήμης των 134217728 Bytes (CodeIgniter + XML-RPC)

Έχω ένα σωρό συστήματα POS πελατών που στέλνουν περιοδικά νέα δεδομένα πωλήσεων σε μια κεντρική βάση δεδομένων, η οποία αποθηκεύει τα δεδομένα σε μια μεγάλη βάση δεδομένων για τη δημιουργία αναφορών.

Το POS του πελάτη βασίζεται στο PHPPOS και έχω υλοποιήσει μια ενότητα που χρησιμοποιεί την τυπική βιβλιοθήκη XML-RPC για την αποστολή δεδομένων πωλήσεων στην υπηρεσία. Το σύστημα διακομιστή είναι βασισμένο στο CodeIgniter και χρησιμοποιεί τις βιβλιοθήκες XML-RPC και XML-RPCS για το στοιχείο webservice. Κάθε φορά που στέλνω πολλά δεδομένα πωλήσεων (μόλις 50 σειρές από τον πίνακα πωλήσεων και μεμονωμένες σειρές από το sales_items που αφορούν κάθε στοιχείο εντός της πώλησης) λαμβάνω το ακόλουθο σφάλμα:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 54 bytes)

128M είναι η προεπιλεγμένη τιμή στο php.ini, αλλά υποθέτω ότι είναι ένας τεράστιος αριθμός για να σπάσει. Στην πραγματικότητα, έχω δοκιμάσει ακόμη και να ορίσω αυτή την τιμή σε 1024M, και το μόνο που κάνει είναι να πάρει περισσότερο χρόνο για να βγει το σφάλμα.

Όσον αφορά τα βήματα που έχω λάβει, έχω δοκιμάσει να απενεργοποιήσω όλη την επεξεργασία στην πλευρά του διακομιστή και το έχω ρυθμίσει ώστε να επιστρέφει μια απάντηση σε κονσέρβα ανεξάρτητα από την είσοδο. Ωστόσο, πιστεύω ότι το πρόβλημα έγκειται στην πραγματική αποστολή των δεδομένων. Προσπάθησα ακόμη και να απενεργοποιήσω τον μέγιστο χρόνο εκτέλεσης σεναρίου για την PHP, και εξακολουθεί να εμφανίζει σφάλματα.

ini_set('memory_limit', '-1'); παρακάμπτει το προεπιλεγμένο όριο μνήμης PHP.

Σχόλια (17)

Είναι πολύ εύκολο να έχετε διαρροές μνήμης σε ένα σενάριο PHP - ειδικά αν χρησιμοποιείτε αφαίρεση, όπως ένα ORM. Δοκιμάστε να χρησιμοποιήσετε το Xdebug για να σκιαγραφήσετε το σενάριό σας και να μάθετε πού πήγε όλη αυτή η μνήμη.

Σχόλια (6)

Για τους χρήστες του Drupal, αυτή είναι η απάντηση του Chris Lane's:

ini_set('memory_limit', '-1');

λειτουργεί, αλλά πρέπει να το βάλουμε ακριβώς μετά το άνοιγμα

<?php

στο αρχείο index.php στο ριζικό κατάλογο της ιστοσελίδας σας.

Σχόλια (0)