- Home
- Categorie
- Coding e Sistemistica
- Hosting e Cloud
- Ottimizzare la configurazione di apache2
-
Ottimizzare la configurazione di apache2
Salve ragazzi,
ho un VPS con 512 mb di ram e senza possibilità di Swap.
Ho l'esigenza di tenere operativo apache2 al meglio delle sue possibilità, cioè che anche in presenza di molte richieste non mi si schianti tutto per carenza di memoria.
Senza apache2 attivo ho liberi 360mb di ram (ho scelto la mpmprefork)
appena partito ho 290 mb liberi, dopo giorni di utilizzo mi attesto sui 250mb.
La configurazione l'ho fatta un po' a prove e tentativi, ma penso che non sia giusta perché ogni tanto google mi riporta "url non raggiungibile".la configurazione l'ho impostata così:
<IfModule mpm_prefork_module>
StartServers 20
MinSpareServers 30
MaxSpareServers 50
ServerLimit 128
MaxClients 128
MaxRequestsPerChild 1000
</IfModule>Esiste un modo per ottimizzare questa configurazione in modo che mi risponda a più richieste contemporanee (di come è settata adesso) in modo che non mi sfondi la quota dei 400 mb totali (cioè apache non prenda più di 250mb di ram)?
Ho letto molto in giro, ma non mi è chiaro.
Sulla vps ho anche mysql e php ma non li uso se non per l'amministrazione, quindi ritengo che conservare 100mb di ram sia ok, ma magari sbaglio.
-
in condizioni di memoria limita usare il prefork non è il massimo....tieni conto che il prefork genera N processi e ogni processo contiene tutti i dati di apache, consumando un botto di memoria
in quella situazione il worker sarebbe meglio
però supponendo tu abbia Centos su quel VPS e magari è pure un VPS virtuozzo, è difficile che sotto carico elevato apache possa darti chissà quali performance
tu hai cercato di limitare il numero di richieste contemporanee a cui apache può rispondere, settandolo a 128
ma 128 è un valore decisamente basso....se consideri che mediamente un browser per caricare una pagine invia una trentina di richieste ( tra html, javascript, immagini varie presenti sulla pagina )....quei 128 slot si saturano subito
con quella configurazione è naturale che spesso google riceva "url non raggiungibile"
la cosa importante da tenere in conto è il numero di hit che quel server riceve ogni giorno....ci sono limiti all'ottimizzazione e a mio avviso nel tuo caso sono stati raggiunti
a questo punto più che cercare di ottimizzare apache sarebbe meglio prendere in considerazione un web server ultraleggero come nginx
-
Grazie Paolino,
Purtroppo mi tocca rimanere con apache2 in quanto non saprei cambiare la configurazione della macchina vps che monta un sistema per gestire più domini (non penso sia virtuozzo, non l'ho mai visto).
Con la ram che ho a disposizione qual è la migliore soluzione, mantenendo apache? Mi pare di capire che worker sia da preferire, ma con quello non sono riuscito a evitare la morte del processo per fine memoria (probabilmente il mdr arriva a filotti e mi satura tutto).
-
il problema è che senza swap c'è poco da fare
il web server si trova un certo numero di richieste dai client, prova ad allocare memoria per le strutture e non la trova
però d'altro canto impostare un numero così basso per MaxClients, vuol dire avere continuamente url non raggiungibile
a questo punto bisogna capire perchè consuma tanta memoria....il sito è forse dinamico? in quel caso potrebbero essere gli script il problema
oppure il sito ha un numero elevato di visitatori? in questo caso l'unica opzione è passare ad un server più potente
-
Grazie Paolino,
Allora ho provato a capire qualcosa di più del server e ho disabilitato alcuni servizi che ritengo non mi siano necessario (bind9, courier, postfix, postgrey, spero di non aver erratoe ora ho liberi 439mb di memoria senza che sia eseguito apache2
Adesso lo lascio così per un po' (una quindicina di giorn) per vedere se le routine cronnate non si arrabbiano e se continua a funzionare tutto come prima.
Con 439MB ci sono speranze o è sempre pochetto? Non immaginavo ci volessero tante risorse per un web server!
Dando un occhio ai log c'è modo di trovarci qualcosa di interessante?
-
bind9???? quello è il server dns...sei sicuro che adesso i siti che si trovano sul vps siano accessibili?
courier e postfix servono per gestire la posta
postgres è il database
-
ho spento bind9 in quanto uso in dns del registrar e non quello locale.
Mi pare che tutto sia a posto.
La posta non la gestisce questa VPS, però mi sono accorto che postfix mi serve operativo altrimenti i moduli php non riescono a inviarmi le email di avviso.
Per il resto mi pare tutto sia ok. Mi ritengo, forse sbagliando, tranquillo
-
Allora ho fatto un po' di prove, però non penso di avere trovato la strada giusta.
Ho messo questa configurazione:
<IfModule mpm_prefork_module>
StartServers 20
MinSpareServers 30
MaxSpareServers 50
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 1000
</IfModule>e mi pare non sfondare la memoria libera.
Ho provato anche a mettere il modulo worker al posto del prefork con questa configurazione:
<IfModule mpm_worker_module>
StartServers 50
MaxClients 256
MinSpareThreads 10
MaxSpareThreads 50
ThreadsPerChild 32
MaxRequestsPerChild 500
ThreadStackSize 65535
</IfModule>Però a questo punto la mia ignoranza viene a galla
Per testare le connessioni al webserver uso jakarta meter (accetto consigli) lanciato da osx con 128 thread contemporanei.
Con prefork inizia ad apparirmi un error rate del 50% intorno al 100 sample. Il che lo interpreto come "URL non raggiungibile" ma magari sbaglio, non è un tool molto chiaro.
Con worker questo accade molto prima, intorno al 50esimo, ma si attesta intorno al 50%.Leggendo mi pare di avere capito che in questo centri in timeout che ho configurato così:
Timeout 60
KeepAlive On
MaxKeepAliveRequests 25
KeepAliveTimeout 15In teoria avendo impostato 256 come maxclient dovrei avere 25 bloccati per un periodo di 15 secondi, però magari ho capito male.
A questo punto mi servono anche dei consigli su come testare/stressare il server in modo da capire.
Grazie!
-
prova con ab che è fornito con apache stesso per stressare il server
però ripeto, con quella quantità di ram e il numero di richieste che gli invii è normale che vada in crisi, soprattutto se sotto c'è un sito dinamico in php