Ölümcül Hata: İzin Verilen 134217728 Baytlık Bellek Boyutu Tükendi (CodeIgniter + XML-RPC)

Periyodik olarak tek bir merkezi veritabanına yeni satış verileri gönderen ve bu verileri rapor oluşturmak için büyük bir veritabanında depolayan bir grup müşteri satış noktası (POS) sistemim var.

İstemci POS, PHPPOS tabanlıdır ve satış verilerini servise göndermek için standart XML-RPC kütüphanesini kullanan bir modül uyguladım. Sunucu sistemi CodeIgniter üzerine kurulu ve webservice bileşeni için XML-RPC ve XML-RPCS kütüphanelerini kullanıyor. Ne zaman çok fazla satış verisi göndersem (sales tablosundan 50 satır kadar az ve sales_items'ten satıştaki her bir ürüne ait ayrı satırlar) aşağıdaki hatayı alıyorum:

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

128M, php.ini dosyasında varsayılan değerdir, ancak bunun kırılması için çok büyük bir sayı olduğunu varsayıyorum. Aslında, bu değeri 1024M olarak ayarlamayı bile denedim ve tek yaptığı hata vermesinin daha uzun sürmesi oldu.

Attığım adımlara gelince, sunucu tarafındaki tüm işlemleri devre dışı bırakmayı denedim ve girdiden bağımsız olarak hazır bir yanıt döndürmek için ayarladım. Ancak, sorunun gerçek veri gönderiminde yattığına inanıyorum. PHP için maksimum komut dosyası yürütme süresini devre dışı bırakmayı bile denedim ve hala hata veriyor.

ini_set('memory_limit', '-1'); varsayılan PHP bellek sınırını geçersiz kılar.

Yorumlar (17)

Bir PHP betiğinde bellek sızıntısı olması çok kolaydır - özellikle de ORM gibi bir soyutlama kullanıyorsanız. Kodunuzun profilini çıkarmak için Xdebug kullanmayı deneyin ve tüm bu belleğin nereye gittiğini bulun.

Yorumlar (6)

Drupal kullanıcıları için bu Chris Lane'in cevabı:

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

çalışır ancak açılıştan hemen sonra koymamız gerekir

<?php

etiketini sitenizin kök dizinindeki index.php dosyasına yerleştirin.

Yorumlar (0)