Bir PHP komut dosyası profile için basit yolu

8 Cevap php

Bir PHP komut dosyası profile kolay yolu nedir?

Ben bu konuda bir şey teyel bana bütün fonksiyon çağrıları ve ne kadar sürdü, bir dökümünü gösterir ama aynı zamanda etrafında bir şey, belirli işlevleri koyarak iyiyim isterim.

Ben microtime fonksiyonu ile deneme çalıştı:

$then = microtime();
myFunc();
$now = microtime();

echo sprintf("Elapsed:  %f", $now-$then);

ama bazen bana olumsuz sonuçlar verir. Artı benim kod üzerinde olduğunu serpin bir sürü sorun var.

8 Cevap

Aşağıdaki gibi PECL APD uzantısı kullanılır:

<?php
apd_set_pprof_trace();

//rest of the script
?>

Sonra kullanarak oluşturulan dosyayı ayrıştırmak pprofp.

Örnek çıktı:

Trace for /home/dan/testapd.php
Total Elapsed Time = 0.00
Total System Time  = 0.00
Total User Time    = 0.00


Real         User        System             secs/    cumm
%Time (excl/cumm)  (excl/cumm)  (excl/cumm) Calls    call    s/call  Memory Usage Name
--------------------------------------------------------------------------------------
100.0 0.00 0.00  0.00 0.00  0.00 0.00     1  0.0000   0.0009            0 main
56.9 0.00 0.00  0.00 0.00  0.00 0.00     1  0.0005   0.0005            0 apd_set_pprof_trace
28.0 0.00 0.00  0.00 0.00  0.00 0.00    10  0.0000   0.0000            0 preg_replace
14.3 0.00 0.00  0.00 0.00  0.00 0.00    10  0.0000   0.0000            0 str_replace

İstediğiniz xdebug sanırım. Sunucu üzerinde kurmak, kcachegrind (linux için) veya wincachegrind (Windows için) ile pompa çıkışı, bunu açmak ve bu size bir kaç güzel grafikler göstermek edeceğiz ayrıntı tam zamanlamaları, sayıları ve bellek kullanımı (ama bunun için başka bir uzantı gerekir).

D: Bu ciddi, kayalar

Microtimes çıkarılarak size olumsuz sonuçlar verirse, argümanı ile işlevini kullanarak try true (microtime(true)). (Bu argüman olmadan denir eğer onun yaptığı gibi) true ile, işlevi yerine bir dize bir şamandıra döndürür.

Webgrind Xdebug için cachegrind görselleştirmek için mükemmeldir

enter görüntü açıklaması here

PECL XHPROF çok interensting görünüyor. Bu clickable HTML interface raporlar ve oldukça basit bir documentation görüntüleme için vardır. Ama bunu test etmek için henüz.

Dürüst olmak gerekirse, ben profilleme için NewRelic kullanarak en iyi olduğunu iddia edeceğim.

O tüm zamanını yavaşlatmak görünmüyor PHP uzantısı ve onlar aşağı terbiyeli matkap izin için izleme yapmak. Pahalı versiyonunda onlar ağır matkap aşağı izin (ama biz onların fiyatlandırma modelini göze alamaz).

Düşük meyveler çoğu nerede Yine de, hatta ücretsiz standart / planı, çok açık ve basit. Ben de çok size DB etkileşim üzerinde bir fikir verebilir gibi.

arayüzleri birinin screenshot zaman profiling

I like to use phpDebug for profiling. http://phpdebug.sourceforge.net/www/index.html

Bu kullanılan herhangi bir SQL için her zaman / bellek kullanımının yanı sıra tüm dahil dosyaları çıktılar. Açıkçası, soyutlanmış oluyor kod en iyi çalışır.

Fonksiyon ve sınıf profilleme Ben sadece microtime() + get_memory_usage() + get_peak_memory_usage() kullanacağız.

Kıyaslama için, örnekteki gibi, ben pear Benchmark paketini kullanabilirsiniz. Bu ölçmek için işaretleri ayarlayın. Sınıf da bir kaç sunum yardımcıları sağlar, ya da uygun gördüğünüz gibi verileri işleyebilir.

Ben aslında bir __ yoketme yöntemi ile başka bir sınıfta sarılmış. Bir komut dosyası çıktığında, çıkış syslog'un log4php yoluyla giriş, bu yüzden çalışmak için performans çok veri var olduğunu.