le operazioni sono tante, e, ovviamente, dipendono dal webserver utilizzato. Nel caso specifico di Apache, dipende dal sistema operativo per via del fatto che è in grado di caricare un modulo di gestione delle connessioni ad hoc (i cosidetti MPM).Originariamente inviato da emanueledg
@Daniele: non sapevo che un test veritiero richiedesse necessariamente due macchine indipendenti, pensavo che con l'apertura di una connessione curl locale avrei risolto.
Quali sono le operazioni che il server deve fare e che io non vedo, prima e dopo PHP? (Giusto per averne un'idea, così mi documento).
Diciamo che, in generale, un webserver, ogni volta che accedi ad una pagina, deve prima di tutto accettare la connessione, passare la richiesta ad un thread già esistente o avviarne uno nuovo, iniziare a ricevere i dati, parsare i dati, una volta acquisito l'header della richiesta, deve inizializzare un contesto per la richiesta stessa, iniziare a chiedere ai vari moduli prima di filtraggio e poi gli endpoint che fare e che non fare con la richiesta nel frattempo che continua a ricevere e a passare i dati e per finire deve risponderti.
Ovviamente quello che ho riportato è un "semplice" schemino delle operazioni minimali che un webserver compie (considera che il webserver deve tenere traccia dei dati che passi, o anche del semplice fatto che la il browser ha terminato la richiesta ma la socket deve rimanere aperta, in attesa di dati, per altri N secondi, in base alla configurazione del Keep Alive e via dicendo)
I due computer si rendono necessari perché se vuoi avere un test "realistico" devi mettere sotto stress tutto che significa portare la macchina al limite a passi (ovvero inizi con un carico ben preciso e poi vai crescendo per vedere come risponde il software alle richieste fin quando non vedi che i tempi sono diventati eccessivi e non ha senso continuare). Se portassi la macchina al limite con sia il software di stress sia il software da stressare, beh, non sarebbe un limite "realistico" perché oltre al sistema operativo che, anche se poco, si pappa risorse ... il software di stress si farebbe sentire
perché non usare XDebug?Ho individuato due workaround parzialmente validi per fare una misurazione del solo caricamento delle classe definite:
- il puntatore del parser procede per files; pertanto se il file con le classi di cui monitorare il tempo di parsing è un file PHP incluso, posso rilevare correttamente i timestamp pre e post-inclusione:
.
.
.
I test li ho fatti su Windows XP in locale, sul laptop con 2GB di RAM e processore da 1.8GHz.
Almeno ho un'idea dell'ordine di grandezza del caricamento.
http://www.xdebug.com
Dai un occhio qua
http://www.xdebug.com/docs/profiler