* Bayt İzin bellek boyutu php, bitkin

3 Cevap php

Ben php 'bellek' hatası alıyorum. Bir komut dosyası için bu kadar bellek anormal, çünkü ben ini_set seviyor ("memory_limit", "64M") ile çözülebilecek biliyorum, ama ben istemiyorum. Ben oldukça o kadar bellek gerekir, ama normal değil yapmak o kadar büyük bir kaç raporları var.

Sorun: Ben bile bu kadar bellek tüketen hangi komut bilmiyorum ve hiçbir kullanıcı (henüz) bir hata bildirdi. Ben bu sadece (true olarak ayarlanmış) Hata günlüğü iletilerinin sayesinde ve hatalar.log (benim masaüstünde bir çok görünür dosyası için ayarlanmış) oluyor biliyorum, ama suçlu olduğu komut bildirmez.

Olduğunu bilmek nasıl herhangi bir fikir?

3 Cevap

Muhtemelen büyük veri yapıları, diğer yapılar gibi yeniden bina verileri, çok büyük bir dize manipülasyonlar, belleğe tüm dosyaları yükleme, depolama yeniden getiriliyor verileri yerine son kez çıkarıldı ne yeniden kullanarak oluştururken, bazı temel algoritma hataları, bu tür bir şey. Ve birçok ev yetiştirilen veritabanı işlemcileri yerine sana bir veri kümesi kaynak vererek sorgudan dönen tüm veri kümesini verir. Bu başlangıçta öngörülenden çok daha fazla veri döndürebilir sorgu ile özellikle ölümcüldür.

Eğer kod profil sonra, bellek atık aramaya başlayabilirsiniz. O (örneğin) while( $data = mysql_fetch_assoc() ) yerine foreach( $data_rows as $data ) yapmak çok büyük günlük datasets işlemek için, yapı kodunuzu, bir seferde bir satır ile çalışmak. Bu da aynı zamanda bellek tüketimini azaltacak bir tampon sorgu kullanmanızı sağlar.

Hata günlüğü size öldü senaryoyu söylüyorum olmalıdır. Belki Apache hata günlüğü yardımcı olabilir.

Bu 32M daha fazla bellek yemek için bir komut dosyası için, geçenlerde GD kütüphanesi bazı görüntü türleri rescaling zaman bundan daha fazla tüketmek isteyen ile kullanarak bu sorunu vardı ve çok aynı hata atıldı oldukça normaldir. (Zaten olmamıştır varsa) durumda, ben hafıza katına çıkacak ve güvenli bir şey yürütme süresini kısıtlamak. . Ben bu satırları ile, htaccess ile bunu:

php_value memory_limit 64M
php_value max_execution_time 30

Bunun için bir profiler gerekir. Tercihim xdebug. This article, bir PHP script bellek kullanım bilgilerini almak için nasıl açıklar.