SORU
11 Mayıs 2009, PAZARTESİ


Teşhis Bellek Sızıntıları - bellek boyutu # bayt bitkin İzin

Korkunç hata iletisi karşılaştığım, muhtemelen aracılığıyla özenli bir çaba, PHP bellek: tükendi

Bellek boyutu #### izin verilen bayt bitkin (ayırmaya çalıştı#### bayt) on line 123 file.php

Sınırı artıyor

Eğer artırmak istiyorsanız ne yaptığınızı biliyorsanız sınırı memory_limit bkz

ini_set('memory_limit', '16M');
ini_set('memory_limit', -1); // no limit

Dikkat! Tek belirti değil, sorunu çözmek olabilir!

Sızıntı teşhis:

Hata iletisini bir satır sızıntı olduğuna inandığım, ya da ihtiyaç olmadığı halde biriken, bellek bir döngü içinde olduğunu gösteriyor. Her yinelemenin sonunda memory_get_usage() ifadeleri bastınız ve sayı sınırı ulaşana kadar yavaş yavaş büyür görür

foreach ($users as $user) {
    $task = new Task;
    $task->run($user);
    unset($task); // Free the variable in an attempt to recover memory
    print memory_get_usage(true); // increases over time
}

Bu soruyu amacıyla hadi en kötü spagetti kod hayal global kapsam $user Task içinde bir yerlerde saklandığını varsayalım.

Araçlar, PHP hileler, ya da hata ayıklama voodoo için bana yardım edin sorunu ne olabilir?

CEVAP
11 Mayıs 2009, PAZARTESİ


PHP çöp toplayıcı yok. Başvuru sayma bellek yönetmek için kullanır. Böylece, bellek sızıntıları en yaygın kaynağı döngüsel başvurular ve global değişkenler vardır. Eğer bir çerçeve kullanıyorsanız, bunu bulmak için trol için bir sürü kod olacak, korkarım. En basit alet seçici memory_get_usage konuşması ve bu kodu nerede sızıntı daraltmak için. Ayrıca xdebug kod bir izleme oluşturmak için kullanabilirsiniz. execution traces show_mem_delta ile kodu çalıştırın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • The Pet Collective

    The Pet Coll

    5 Ocak 2012
  • TomKNJ

    TomKNJ

    26 ŞUBAT 2007
  • TomSka

    TomSka

    30 Mayıs 2006