Il giorno 20 ott 2015, alle ore 19:43, Salvatore Racano <salvatoreracano@gmail.com> ha scritto:
il problema è che il server impiega secondi per restituire la pagina, tutta la fruizione è lenta.
Rinforzo i saggi consigli di Marco con alcuni esempi pratici.
Supponiamo che l’ip del tuo server sia ‘1.1.1.1’ e che sulla root (http://1.1.1.1/) fornisca una pagina che non accede al db (una pagina di errore, una homepage con un form di login, qualsiasi cosa va bene. oppure mettiti tu un file statico “prova.html”, anche vuoto, e usa quello negli url di test).
- vai in ssh/console sul server e dai un “time curl http://1.1.1.1 >/dev/null”, vedi quanto tempo ti ci mette
- stai su un host della rete
locale (bsd, linux, osx…) e ridai lo stesso comando
Ora supponiamo che tu normalmente per usare quel server ci accedi da un pc in rete e hai un hostname nell’url (non un ip numerico), l’hostname è del tipo http://NOMESERVER/blablabla
Vai sullo stesso pc, apri un terminale / prompt dei comandi / shell e dai un “ping NOMESERVER”. L’output di ping somiglia ad una cosa del genere:
luca:~ luca$ ping switch
PING switch.home.lesinigo.it (192.168.10.253): 56 data bytes
64 bytes from 192.168.10.253: icmp_seq=0 ttl=64 time=2.218 ms
Qui dovrai stare attento a due cose diverse:
1- quanto tempo ci impiega da quando dai il comando a stampare la prima riga, quella in cui compare l’ip numerico
2- il tempo di ping
Se tutti questi check ti danno risultati “normali” (diciamo nell’ordine del
decimo di secondo per il curl, e risoluzione praticamente immediata da nome a ip numerico, e pochi millisecondi per il tempo di ping) quasi sicuramente il tuo problema sta nel codice PHP e/o negli accessi che questo fa al database.
Perché ti dico di usare “ping” e non un più canonico “host NOMESERVER” ?
Perché se usi “host” non stai testando il resolver del sistema! Ma solo i server dns: in altre parole, con “host” salti completamente cose come il file /etc/hosts. Testare la risoluzione dei nomi con “ping” è l’unico metodo che io conosca che è veramente universale, funziona su tutti gli o.s. - compreso windows - a prescindere da cosa c’è installato dentro e va ad usare il resolver di sistema (gethostbyname() di libc e roba simile).
Invece “host” legge gli ip dei dns da /etc/resolv.conf o equivalente e va a interrogare i server dns (mandando query sulla udp/53), questo può essere parte di una normale risoluzione di nomi ma
non è l’unica parte in gioco. Quindi non rappresenta fedelmente ciò che succede quando scrivi un hostname nella barra indirizzi di un browser.
Se tutto questo da esito negativo (cioè sembra tutto nella norma ma le tue pagine continuano ad essere lente) ti consiglio di infilare un po’ di telemetria nei tuoi script PHP: prenditi il valore di microtime() all’inizio ed alla fine degli script e in punti di mezzo “interessanti” (per esempio prima/dopo di query o di cicli potenzialmente lunghi) e vedi un po’ dov’è che sta perdendo tempo.
Ah, se anziché usare HTTP usassi HTTPS ci potrebbero essere anche altre cose di cui tenere conto.
--
Luca Lesinigo
Talking mailing list
Talking@ml.linuxvar.it
http://ml.linuxvar.it/cgi-bin/mailman/listinfo/talking