Jump to content
Sign in to follow this  
vardar

Aiuto per ottimizzazione webserver apache

Recommended Posts

Salve a tutti, questa è la prima volta che scrivo e spero sinceramente che possiate aiutarmi perchè sono un po' in crisi.

Cerco nel dettaglio di spiegarvi il mio problema:

 

Io ho da qualche anno un webserver a casa con installato sopra ubuntu server su cui faccio girare dei siti miei in php con database mysql. Niente di particolarmente esagerato, almeno in apparenza.

Come connessione internet utilizzo una adsl con 1M (1024 kb/s) in upstream di cui 512 garantiti.

Purtroppo (o per fortuna, a seconda dei punti di vista) nel tempo ho iniziato ad avere parecchi utenti, arrivando quasi al migliaio di utenti unici al giorno ed, in alcuni momenti, fra tutti i siti arrivavo ad avere anche 70-80 utenti collegati contemporaneamente.

 

Chiaramente in queste condizioni il sito iniziava ad andare piuttosto lento, così ho acquistato un nuovo server con queste caratteristiche:

 

Intel Xeon 4x core 1.86 GHz

2Gb ram

2 x 250GB SATA RAID 1

 

Soprattutto, la cosa che mi pareva più importante è la banda che doveva essere di 10 Mbit/s (minimo garantito 2 Mbit/s), cosa che mi sembrava un notevole passo avanti rispetto al mio misero 1M.

 

Ho così installato ubuntu server sul nuovo server, l'ho configurato più o meno come il vecchio server, caricato i file ed il database mysql e spostato i dns.

Tutto bene, almeno in apparenza, felice e contento ero convinto che non avrei più avuto problemi di lentezza (almeno per un po' di tempo). Invece, con mia somma sorpresa, è successo che quando il server ha raggiunto la soglia fatidica di 70-80 utenti il nuovo server (che intono ai 50 utenti funzionava in modo brillante) ha avuto un decadimento di prestazioni enorme tanto che la navigazione risultava sensibilmente più lenta anche di quanto lo era sul vecchio server con la banda di 10 volte inferiore.

 

La cosa che mi sorprende è che intorno ai 40-50 utenti funziona tutto molto bene, quando l'utenza aumenta un po' rallenta pesantemente. Tra l'altro sembra (ma di questo non riesco ad averne la certezza, perchè potrebbe essere anche una questione di cache) che alternativamente, vada più veloce per certi attimi (roba di 20-30 secondi) e poi si rallenta di nuovo.

 

Io ho avvisato l'assistenza per controllare effettivamente quanto sia la banda, ma loro, ovviamente, mi hanno anche indicato che il problema potrebbe essere di sovraccarico del server.

A questo punto, chiaramente, anche a me viene il dubbio che ci siano dei problemi di configurazione (anche se mi pare strano non avendo mai avuto problemi di sovraccarico sul mio server casalingo).

 

Qualcuno potrebbe, gentilmente, darmi qualche dritta per la configurazione di apache/mysql per ottimizzare al meglio il mio server?

Share this post


Link to post
Share on other sites

Ciao,

prima di fare qualsiasi modifica dovresti analizzare il problema; quindi dovresti:

 

  • installare munin o cacti e farlo girare qualche giorno per poi avere dei grafici da poter analizzare;
  • verificare nei momenti di stress del sito se ci sono processi che occupano tutta la cpu;
  • verificare l'occupazione di memoria ram e della swap;
  • abilitare le slow-query in my.cnf .

Inoltre, i siti sono scritti da te o usi CMS come wordpress, drupal, etc etc?

 

Saluti

Share this post


Link to post
Share on other sites
Ciao,

prima di fare qualsiasi modifica dovresti analizzare il problema; quindi dovresti:

 

  • installare munin o cacti e farlo girare qualche giorno per poi avere dei grafici da poter analizzare;
  • verificare nei momenti di stress del sito se ci sono processi che occupano tutta la cpu;
  • verificare l'occupazione di memoria ram e della swap;
  • abilitare le slow-query in my.cnf .

Inoltre, i siti sono scritti da te o usi CMS come wordpress, drupal, etc etc?

 

Saluti

 

Allora, alcune di queste verifiche le ho fatte e ti posso dire che nel momento di maggiore lentezza, comunque io accedevo in ssh e il processo che occupava più risorse era il demone mysql (mysqld) che indicava 3 come %CPU e 2.4 come %MEM, quindi mi sembra valori decisamente bassi.

 

La ram era parecchio occupata, arrivando fino a 1.8M su 2 però non arrivava a fare lo swap, quindi anche se un po' al limite era dentro le risorse.

 

Gli script li ho scritti tutti io, tranne il forum che utilizzo un programma scaricato, ma il forum ha un'incidenza minima sul server dal momento che viene usato molto poco.

 

Eventualmente mi sai dare qualche indicazione per ottimizzare mysql su un server con 2 Gb di ram?

 

Piccolo Edit:

 

Attualmente (ore 12:49) ho circa 40 utenti connessi, la memoria occupata è di 794082 Kb, 0 Kb di swap e il server è una scheggia.

Share this post


Link to post
Share on other sites
Allora, alcune di queste verifiche le ho fatte e ti posso dire che nel momento di maggiore lentezza, comunque io accedevo in ssh e il processo che occupava più risorse era il demone mysql (mysqld) che indicava 3 come %CPU e 2.4 come %MEM, quindi mi sembra valori decisamente bassi.

 

La ram era parecchio occupata, arrivando fino a 1.8M su 2 però non arrivava a fare lo swap, quindi anche se un po' al limite era dentro le risorse.

i valori del carico del server come sono? potrebbe essere un problema di I/O.

in ogni caso abilita le slow query, oppure aumenta il numero di connessioni concorrenti al db.

 

Gli script li ho scritti tutti io, tranne il forum che utilizzo un programma scaricato, ma il forum ha un'incidenza minima sul server dal momento che viene usato molto poco.

ho chiesto cio' solo per capire se c'erano cose "note" su cui potevamo basarci.

chiaramente sarebbe utile analizzare per bene il codice che hai scritto.

 

ad occhio non e' un problema di banda.

Eventualmente mi sai dare qualche indicazione per ottimizzare mysql su un server con 2 Gb di ram?

puoi usare lo script tuning-primer per avere un'idea delle cose da modificare. come tutti i tool di "ottimizzazione" necessita di collezionare dati e quindi che mysql sia attivo da 24-48 ore...

 

Piccolo Edit:

 

Attualmente (ore 12:49) ho circa 40 utenti connessi, la memoria occupata è di 794082 Kb, 0 Kb di swap e il server è una scheggia.

non dovrebbe essere un problema di ram.

 

ciao

Share this post


Link to post
Share on other sites

Allora, spulciando qui sul forum ho scaricato mysql tuner e mi da alcune indicazioni (tra l'altro anche lui mi dice di abilitare le slow query e allora ho tolto il commento a log_slow_query, è sufficiente questo?) solo che ho qualche dubbio...

 

per prima cosa mi dice che alcuni variabili devono essere "> 16M"... ora, d'accordo maggiori ma non è possibile avere qualcosa di più dettagliato? 17? 24? 36? 8000000?

 

Un'altra cosa, scusa l'ignoranza, alcune variabili che mi dice di modificare (ad esempio tmp_table_size) non esistono nel file my.cnf, mentra un'altra variabile (table_cache) c'è ma è commentata. E' normale? Devo aggiungerle o decommetarle io?

 

Sul codice da me scritto... per carità, io non mi ritengo un fenomeno, magari qualche cretinata l'avrò anche scritta io, però mi permetto di dire che i miei file non li ho scritti ieri, li uso da anni sul server precedente (tra l'altro entrambi sono ubuntu server 10.10, quindi nemmeno a dire che sono due sistemi operativi diversi) e di questi problemi non ne avevo.

 

P.S.

 

per quanto riguarda il carico del server, con il comando topo mi segnala:

 

load average: 0.14, 0.07, 0.01

Share this post


Link to post
Share on other sites
Allora, spulciando qui sul forum ho scaricato mysql tuner e mi da alcune indicazioni (tra l'altro anche lui mi dice di abilitare le slow query e allora ho tolto il commento a log_slow_query, è sufficiente questo?) solo che ho qualche dubbio...

dovresti anche dirgli dove vuoi che vengano loggate le query :)

 

per prima cosa mi dice che alcuni variabili devono essere "> 16M"... ora, d'accordo maggiori ma non è possibile avere qualcosa di più dettagliato? 17? 24? 36? 8000000?

si chiama fine tuning perche' bisogna far le prove... tuning-primer e' forse un pelo piu' dettagliato di mysqltuner, provalo e vedi.

 

Un'altra cosa, scusa l'ignoranza, alcune variabili che mi dice di modificare (ad esempio tmp_table_size) non esistono nel file my.cnf, mentra un'altra variabile (table_cache) c'è ma è commentata. E' normale? Devo aggiungerle o decommetarle io?

si, devi metterle tu :)

 

Sul codice da me scritto... per carità, io non mi ritengo un fenomeno, magari qualche cretinata l'avrò anche scritta io, però mi permetto di dire che i miei file non li ho scritti ieri, li uso da anni sul server precedente (tra l'altro entrambi sono ubuntu server 10.10, quindi nemmeno a dire che sono due sistemi operativi diversi) e di questi problemi non ne avevo.

non metto in dubbio, magari pero' e' un codice che "scala poco"... prova comunque ad aumentare il numero di connessioni concorrenti al db.

 

P.S.

 

per quanto riguarda il carico del server, con il comando topo mi segnala:

 

load average: 0.14, 0.07, 0.01

se e' il carico quando il server "va piano", allora bisogna guardare altrove...

 

ciao

Share this post


Link to post
Share on other sites

Allora, prima di tutto ti ringrazio per gli ottimi consigli (non l'avevo ancora fatto :p), per ora ho provato a modificare un po' il file my.cnf e ho riavviato mysql, ora vediamo come va.

Per il resto... le slow query ho scritto:

 

log_slow_queries = /var/log/mysql/mysql-slow.log

 

ho anche altre due variabil, long_query_time = 2 e log-queris-not-using-indexes, che però sono commentate. E' utile attivarle?

 

Infine, per il numero di connessioni io ho un max_connections = 100, che però è commentato.

Immagino significhi che sono infinite, giusto?

 

Edit:

 

Aggiungo una cosa... ora sono circa 65 utenti sul server, la ram occupata è 930300, il carico è 0.10, 0.10, 0.05 quindi direi perfettamente entro i limiti.

Una cosa però ho notato... il demone mysql come percentuale di ram mi da 1.7 e di cpu 3 ma ogni tanto la cpu schizza a valori più alti (19, 17, 22, persino 113) per poi tornare ad attestarsi su 3 o 4. Sono normali questi picchi?

Share this post


Link to post
Share on other sites
se le variabili di mysql non sono espresse usa i valori di default

 

con un show variables;

vedi tutti i valori ...

 

hai provato a fare un test di upload/download per vedere l'ampiezza di banda?

 

Sì, il test della banda è stato fatto e risulta (almeno da quelli che gestiscono l'hardware del server) che è oltre i 9 Mbps, quindi corretta.

Share this post


Link to post
Share on other sites

Eccolo qua... ora si è rallentato di nuovo terribilmente, eppure effettuando il top mi segnala:

 

load average: 0.17, 0.07, 0.01

memoria usata: 1144188 k

swap: 0

 

gli altri processi sono nella norma. Il mysqld segna 3.3 come memoria e 6 di cpu....

 

eppure il server è diventato di nuovo lentissimo. Non sembra ci sia niente di particolare. Ora chiedo una cosa... se fosse un problema di msyql non ottimizzato questo rallenterebbe anche il caricamento di pagine che non hanno alcuna connessione mysql?

 

Aggiungo anche un'altra cosa: sembra che il problema si manifesti "a momenti"...

Capisco che è un po' difficile da spiegare ma ci provo. Allora capita che in alcuni momenti il server è praticamente fermo, non mi carica nulla, è come se fosse morto. Poi, all'improvviso, si riprende e torna veloce. Io clicco su 3/4 pagine consecutive ed è normale. Poi si siede nuovamente.

Eppure gli utenti sono sempre gli stessi, e anche le query al database, suppongo, sono sempre le stesse. Non credo che un utente in una chat, per dire, rallenti o acceleri il numero di query che fa mentre è connesso.

Davvero, non so più che pensare....

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×