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
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.
33554432 bayt bellek boyutu bitkin (43...
Ölümcül Hata: Bellek Boyutu 134217728 ...
Neden ve Nasıl Olay İşleyicisi bellek ...
Basit bir jQuery Ajax arama sızıntılar...
Bir şekilde Tomcat undeployment bellek...