2012-11-20 10 views
7

Recentemente ho aggiunto i tempi di esecuzione di PHP ai registri dei visitatori per individuare possibili problemi nel codice o nei database. Il tempo viene misurato come differenza microtime() tra inizio e fine dello script.Esecuzione PHP lunga per utenti con latenza elevata (?)

Il tempo medio di esecuzione (compresi i miei test sulla versione di debug del sito) è 2-15 ms. Poi vedo casualmente l'esecuzione di + 300 ms per alcuni utenti. Questi sono probabilmente causati da picchi di carico, query di database non collegate o accesso al filesystem.

Quello che non riesco a capire sono ogni tanto gli utenti che compaiono con un tempo di esecuzione di 5-30 secondi (!). Sulla base dei miei test quelli appaiono su pagine apparentemente casuali e non ci sono picchi di richieste sui log di accesso per quei tempi, né c'è nulla sul codice o query di database che potrebbero causare questa prestazione lenta. Il 90% di queste richieste proviene dalla Cina e sembra essere una specie di crawler o robot.

Quindi: la latenza può influire sul tempo di esecuzione di uno script PHP? L'esecuzione di PHP viene interrotta mentre il buffer precedente viene inviato all'utente?

ho trovato questo altro thread con la materia apparentemente simili, ma non ci fu risposta: PHP's execution time changes based upon internet/connection latency?

EDIT:
ho finito per aumentare PHP output_buffering da 4K a 128K byte. Ora il tempo di esecuzione tipico è sceso a 2-6 ms e non ci sono più tempi casualmente lunghi in modo ridicolo.

+3

"Quindi: la latenza può influire sul tempo di esecuzione di uno script PHP? L'esecuzione di PHP viene interrotta mentre il buffer precedente viene inviato all'utente?" --- per evitare che nginx venga usato come proxy inverso. Quindi php + apache funziona velocemente, quindi nginx serve lentamente – zerkms

+0

Non c'è un modo per fare in modo che l'apache funga da buffer per PHP? Non mi importa se i processi di Apache vivono più a lungo, l'unico problema è che gli script php ritardati rovinano le statistiche sul tempo di esecuzione delle pagine ... – MiikaH

risposta

1

Penso che la latenza possa influire sul tempo di esecuzione di PHP, a seconda della configurazione del server, in particolare output_buffering and implicit_flush.

Inoltre, alcune funzioni come gethostsbyaddr possono rallentare uno script PHP.

Forse è possibile utilizzare XDebug per generare traccia di esecuzione e vedere la "timeline" dell'esecuzione di uno script.

+0

Sì, ho pensato che il valore "output_buffering" probabilmente è legato a questo. Penso che il ritardo si verifichi ogni volta che PHP scarica il buffer. Sfortunatamente l'aumento di output_buffering potrebbe peggiorare le prestazioni generali perché nulla verrà inviato al browser prima che venga generata l'intera pagina. – MiikaH

Problemi correlati