[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [linux_var] apache MySQL, php, risposte lente in localhost su olimex micro



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