Geçenlerde aynı sorunu geldi ne yazık ki herhangi bir özel alet bulamadı.
Ama yardım şey mem etkin deltaları ile insan okunabilir biçimde çıktı xdebug iz oldu (INI ayarı, xdebug.show_mem_deltas ya bence bir şey?). Sonra çıktı (eğer * nix üzerinde iseniz) sıralama çalıştırın:
sort -bgrk 3 -o sorted.txt mytracefile.xt
Bu üçüncü col, mem deltalar üzerinde sıralar. Ayrıca bu durumda app toplamda en fazla bellek harcayan hangi çizgi bulabilirsiniz, ikinci sütunu sıralayabilirsiniz.
Bir nesnenin bellek kullanımı sadece küçük kademelerle sürünüyor ama genel bellek bir sürü kullanarak biter ne zaman ki, bu tespit edemez. Ben nesne yineleme ve serileştirme bir arada kullanarak bunu yapmak için girişimleri oldukça aptal bir yöntem var. Muhtemelen bellek kullanımına tam olarak denk değildir, ama umarım aramaya başlamak için nerede bir fikir verir. Unutmayın o belleği kendisi kullanacak ve ayrıca kapsamlı test edilmemiştir, bu nedenle alıcı dikkat:
function analyzeMem($obj, $deep=false)
{
if (!is_scalar($obj))
{
$usage = array('Total'=>strlen(serialize($obj)));
while (list($prop, $propVal) = each($obj))
{
if ($deep && (is_object($propVal) || is_array($propVal)))
{
$usage['Children'][$prop] = analyzeMem($propVal);
}
else
{
$usage['Children'][$prop] = strlen(serialize($propVal));
}
}
return $usage;
}
else
{
return strlen(serialize($obj));
}
}
print_r(analyzeMem(get_defined_vars()));
Ayrıca, sadece bir meslektaşı tarafından bu yöntemi önerdi var (şerefe Dennis ;-) Bu girinti 2 seviyesinin altında olan adımları gizler, size oldukça kolay genel bellek kullanımı atlar noktaları görebilir ve artan daraltacak girinti:
egrep '[0-9]+ ( ){1,2}-> ' mytracefile.xt