2009-06-09 10 views
6

Ho un sito Web PHP su un server Apache e vorrei sapere se ci sono strumenti e altri modi che posso profilare per trovare colli di bottiglia nel codice. Quello che devo sapere è quali funzioni impiegano molto tempo per elaborare, ecc.PHP Profiler per un sistema live su Apache

Qualcosa come gprof, ad eccezione di PHP sul server live Apache.

Quali sono altri modi per trovare colli di bottiglia in un sistema PHP.

+0

Non sono sicuro che sia una buona idea eseguire un profiler costoso su un sito web dal vivo. la creazione di profili rallenta notevolmente l'app. meglio creare una copia locale e fare il profiling lì (questo rimuove anche il rischio di tempi di inattività a causa di problemi di installazione del profiler). – stefs

risposta

0

Per questo lavoro è possibile utilizzare phpdebug. È un'estensione php.

4

Provare XDebug (http://www.xdebug.org/) è possibile attivarlo con un parametro get durante la sessione di debug. Ciò creerà i file cachegrind che è possibile verificare in KCacheGrind o WinCacheGrind (questo è molto meglio) ...

8

È possibile utilizzare xdebug - una volta installato è possibile attivare profiling of requests in una varietà di modi e si finisce con un profilo in formato valgrind per ogni richiesta. Caricalo in WinCacheGrind, KCacheGrind o simile e approfondisci per trovare dove è trascorso tutto il tempo!

alt text

+1

+1 voto su - Xdebug è la migliore opzione FOSS, ma se inizi ad aggiungere server, Zend Platform avrà altri strumenti per ottimizzare le prestazioni. – Pro777

+0

Zend Platform è eccellente se gestisci più server, ma è un po 'vecchio e difficile da installare/configurare. Il successore, Zend Server, non è completo, ma è già abbastanza buono e molto più facile da installare (pacchetti RPM o DEB). Inoltre, l'edizione comunitaria è gratuita. –

+2

xdebug e kcachegrind hanno funzionato perfettamente e hanno isolato i colli di bottiglia che dovevo trovare immediatamente dopo aver caricato il file di traccia. – pdwalker

1

se si dispone di una zona molto mirato da guardare, si consiglia di provare aspersione questi circa il tuo codice:

$f_timeStart=microtime(true); 
$f_timeLast=$f_timeStart; 


error_log(sprintf("%'08.5f",(microtime(true)-$f_timeLast)).' - '.sprintf("%'05.2f",(microtime(true)-$f_timeStart)).' secs - '.'01 before xyz()'."\n", 3, '/var/tmp/my-errors.log'); 
$f_timeLast=microtime(true); 
xyz(); 
error_log(sprintf("%'08.5f",(microtime(true)-$f_timeLast)).' - '.sprintf("%'05.2f",(microtime(true)-$f_timeStart)).' secs - '.'01 after xyz()'."\n", 3, '/var/tmp/my-errors.log'); 
$f_timeLast=microtime(true); 
0

vorrei suggerire contro costruire il proprio profiler. Ci sono diversi profilatori eccellenti disponibili gratuitamente che ti forniranno dettagli dettagliati e facilità d'uso. Penso che il tuo miglior investimento nel tempo sia nella seguente combinazione. Usiamo questo presso la società di web developent per cui lavoro, e siamo molto soddisfatti:

  1. Lo stack Zend Server php:
    È possibile utilizzare la libera Community Edition, e scegliere quali parti dello stack che si desidera installare. Abbiamo installato solo la parte PHP e ci affidiamo ad Apache e MySQL dalla distribuzione Linux. Zend Server offre un'estensione Debugger, un ottimizzatore di codice (per un leggero incremento di velocità), una cache bytecode (per un sostanziale aumento di velocità) e una bella interfaccia grafica per la gestione delle impostazioni PHP. La versione commerciale offre molto di più. L'installazione in Linux è facile tramite pacchetti RPM o DEB.

  2. di utilizzare l'estensione Debugger è necessario un IDE:
    Installare Zend Studio che è un ottimo IDE PHP (controllare la pagina delle caratteristiche), e rende il debugging e il profiling molto facile. Non è necessario creare file cachegrind o altri processi multistep, ma basta fare clic su Profilo nella barra degli strumenti in Firefox e Studio inizia a profilare quella pagina. Il dettaglio e la facilità d'uso sono enormi.

forse sto suona come un venditore di Zend, e forse questo suona come più del necessario, ma io sono solo uno sviluppatore PHP che è molto felice con gli strumenti che usa. Penso che sia il momento ben speso per iniziare a utilizzare Studio, ma la combinazione lo rende ottimo e Server addirittura accelera un po 'il tuo server live. Secondo me questa combo è semplicemente il miglior ambiente di sviluppo PHP attualmente disponibile. Controlla il demo videos. Ce n'è uno anche sul profiling.

0

Se si utilizza OpenSolaris, considerare dtrace. Il più grande vantaggio è probabilmente che puoi esplorare anche altri livelli come Apache, Mysql. dtrace ha un sovraccarico basso ed è possibile abilitare selettivamente solo le sonde che si desidera monitorare.

1

dtrace ha basso overhead

DTrace, infatti, ha quasi zero in testa se non si abilita migliaia di sonde penso che sia disponibile sul BSD

3

XHProf anche stato progettato per questo caso d'uso .

XHProf (open source da Facebook nel 2009) alimenta Facebook XHProfLive - un sistema di monitoraggio delle prestazioni in tempo reale che fornisce approfondimenti a livello di funzione dai livelli di produzione.

Un frammento XHProf doc:

XHProf è un leggero profilatore basato strumentazione. Durante la fase di raccolta dei dati, , mantiene il conteggio delle chiamate e le metriche inclusive per gli archi nel callgraph dinamico di di un programma. Calcola le metriche esclusive nella fase di reporting/post-elaborazione . XHProf gestisce funzioni ricorsive da cicli di rilevamento del callgraph al tempo di raccolta dati stessi e evitando i cicli dando uniche profondità nomi qualificati per le invocazioni ricorsive. la natura leggera

di XHProf e capacità di aggregazione rendono bene adatto per la raccolta di "funzione a livello di" statistiche prestazioni dalla produzione ambienti.

saluti, Kannan Muthukkaruppan

+0

Esiste qualche guida/codice per aiutare a implementare la parte live? per esempio. campionamento di richieste e archiviazione, rappresentazione grafica, ecc. –

1

Lasciatemi anche menzionare Pinba
A mio parere, è più adatto per l'installazione su più server, piuttosto che per un solo server, ma nel caso in cui il progetto di crescere ..