Apache è molto facile da installare e inizializzare, ma viene fornito con numerosi moduli preinstallati e di conseguenza potresti avere problemi di prestazioni durante l'esecuzione su un VPS con RAM bassa.
Quindi, non è sempre necessario un server più grande, ma puoi semplicemente configurare le impostazioni di Apache nel modo giusto e ottenere le migliori prestazioni possibili. Ecco alcune cose che dovresti fare per riuscirci.
Questo tutorial è per Ubuntu 14.04 LTS ma i principi sono simili anche alle versioni precedenti.
1. Disabilitare i moduli Apache
È possibile visualizzare un elenco di tutti i moduli installati con il comando ls /etc/apache2/mods-available/
e di tutti i moduli attualmente attivi ls /etc/apache2/mods-enabled/
.
Nell'installazione iniziale di Apache ci sono 15 o più moduli abilitati di default. Questi sono troppi e la maggior parte di essi non è necessaria.
Prima di tutto, devi fare un elenco di tutti i moduli attualmente attivi e salvarlo per riferimento futuro nel caso in cui disabiliti qualcosa che è necessario e devi riattivarlo. Quindi disabilita semplicemente i moduli uno a uno con il comando (usando moduleName come esempio):
sudo a2dismod moduleName
... e riavvia Apache dopo ogni modifica per vedere se si verificano errori.
Alcuni moduli che dovresti disabilitare se non ti servono sono:
- PHP
- SSL
- Riscrivere
- Perl
- Pitone
Dopo aver disabilitato un modulo e ricaricato la configurazione di Apache, è possibile verificare la presenza di errori aprendo il registro degli errori di Apache con un editor di testo come nano.
sudo nano /var/log/apache2/error.log
Se ricevi un errore, riattiva il modulo corrispondente con:
sudo a2enmod moduleName
Quindi, riavvia nuovamente Apache fino a quando non viene risolto l'elenco minimo!
2. Configurare mpm_prefork
Con la configurazione predefinita di Apache (che non è ben bilanciata per i piccoli server), la memoria può essere esaurita rapidamente e il tuo server cloud può sovraccaricarsi. Ciò causerà il blocco della pagina Web in uno stato di caricamento costante. È probabile che il server mantenga attivi questi processi Apache morti, tentando di servire contenuti inutilmente, riducendo il numero di processi disponibili per servire.
Per risolvere questo problema, devi prima scoprire quanta RAM ha bisogno il tuo server oltre ad Apache e la quantità media di memoria utilizzata dai processi Apache.
Mentre Apache è in esecuzione, apri il comando principale sul server.
top -bn 1
Nella tabella dei risultati:
- aggiungere i numeri nella colonna RES per ogni processo, tranne apache2 e quindi rimuoverlo dalla quantità totale di RAM. Supponiamo che tu ottenga 600 MB .
- ottenere la media da tutti i processi apache2 . Diciamo ottenere 20 MB .
- quindi, basta eseguire la divisione 600/20 = 30 processi Apache massimi
Passaggio successivo, modifica il file di configurazione del modulo mpm_prefork:
sudo nano /etc/apache2/mods-enabled/mpm_prefork.conf
Potrebbe apparire così:
<IfModule mpm_prefork_module>
StartServers 2
MinSpareServers 2
MaxSpareServers 5
MaxRequestWorkers 30
MaxConnectionsPerChild 0
</IfModule>
Dove:
- StartServers: numero di processi server da avviare.
- MinSpareServers: numero minimo di processi server che vengono mantenuti di riserva.
- MaxSpareServers: numero massimo di processi server che vengono mantenuti di riserva.
- MaxRequestWorkers: numero massimo di processi server che possono essere avviati.
- MaxConnectionsPerChild: numero massimo di richieste che serve un processo server.
Nell'impostazione MaxRequestWorkers , devi cambiarlo in qualsiasi cosa tu abbia trovato nella divisione sopra.
Ora, se il tuo VPS viene sovraccaricato e raggiunge il numero massimo di client che può servire contemporaneamente, servirà quelli e gli altri utenti avranno semplicemente un errore rapido. Possono quindi ricaricare la pagina per riprovare. È molto meglio avere queste connessioni chiuse rapidamente ma lasciare il server in uno stato sano piuttosto che rimanere aperto per sempre.
3. Riduci i tuoi registri
Per massimizzare le prestazioni, puoi sicuramente registrare meno informazioni. Nella configurazione predefinita di Apache, l' impostazione LogLevel è impostata su avvisa . Puoi cambiarlo in errore per conservare solo i messaggi di errore.
Apri il file di configurazione di Apache:
sudo nano /etc/apache2/apache2.conf
Trova la linea:
LogLevel warn
... e cambiarlo in:
LogLevel error
Quindi, salva il file e riavvia Apache con:
sudo service apache2 restart
Il file predefinito che Apache conserva i registri è /var/log/apache2/error.log .
4. Valuta di sostituire mod_php
Se gestisci un sito PHP, è molto probabile che tu stia utilizzando il modulo mod_php. Questo modulo può far sì che ogni processo figlio di Apache utilizzi oltre 100 MB di RAM anche se le richieste riguardano risorse statiche come immagini, CSS e JavaScript.
Un'ottima alternativa è il modulo php-fpm , che è un processo separato che utilizza il protocollo fastcgi. Con php-fpm, la memoria per i processi Apache può scendere a 10 MB per contenuto statico e 60 MB per dinamico.
Sebbene possa essere un po 'difficile far funzionare le cose con questo cambiamento, ne vale la pena.
5. Prendere in considerazione la sostituzione di mpm_prefork
La maggior parte delle configurazioni di Apache utilizza il modulo mpm_prefork che è thread-safe e utilizza più processi figlio con un thread ciascuno e ogni processo gestisce una connessione alla volta. Se non hai bisogno di moduli esterni come PHP o Rails, puoi sostituirlo con il modulo apache2-mpm-worker , che spesso è più veloce. Worker MPM utilizza più processi figlio con molti thread ciascuno e ogni thread gestisce una connessione alla volta.
Per abilitare il modulo worker, è necessario installarlo.
sudo apt-get install apache2-mpm-worker
Questo comando disinstalla mpm_prefork , mos_php e altri moduli aggiuntivi incompatibili.