Görsel bir PHP uygulaması bellek kullanımını analiz araçları

6 Cevap php

Bir şey dışında bir PHP uygulama tarafından bellek kullanımı analizini kolaylaştıracak orada ücretsiz veya ticari var mı? Ben xdebug işlev çağrısı ile bellek kullanımını gösterir ama bir grafik aracı olmadan veri yorumlamak zordur izleme dosyaları üretebilir biliyorum.

İdeal toplam bellek kullanımını değil, sadece görmek mümkün olmak ister ama aynı zamanda öbek üzerinde ne nesneler ve kimin Jprofiler benzer onlara başvuran olacaktır.

6 Cevap

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

Mhmm. Ben de, bazı ciddi bellek analiz yapmak gerekir. Ben bu link yardımcı olur merak ediyorum: http://derickrethans.nl/xdebug-and-tracing-memory-usage.html bu yarın test var.

http://www.xdebug.org/updates.php için üzerinde Xdebug onlar bölümünde "kaldırıldı fonksiyonları" yazmak 2.0.4: "... bu gibi bellek profilleme için destek kaldırıldı ... düzgün işe yaramadı." Dolayısıyla xdebug alışkanlık bir seçenek olabilir

Try webgrind. Size tarayıcı tabanlı biçimi, okumak için kolay bir CacheGrinder bir profil veriyor. Ben bir Mac üzerinde yaşıyorum ve bir esinti profilleme yapmıştır.

Xdebug çıkış için bir grafik araçtır KCacheGrind.

phpDesigner 2008 debug ve benchmark siteleri XDebug ve KCacheGrind kullanarak. Ayrıca dahili bir monitör vardır.