Riconosci che Ubuntu 14.04 utilizza Apache 2 con PHP in esecuzione attraverso un modulo mpm_prefork , di cui un file modificabile è in /etc/apache2/mods-enabled/mpm_prefork.conf. Inoltre, riconosci che a partire da Apache 2.4, MaxClients è ora rinominato come MaxRequestWorkers e quindi tutta la documentazione relativa a MaxClients deve essere passata a MaxRequestWorkers.
Arrestare temporaneamente il servizio Web Apache con il seguente comando:
sudo service apache2 stop
- Attendi 5 secondi, quindi esegui il comando seguente per scoprire quanta memoria virtuale hai sul server che è libera:
sudo free -ht
Leggi la riga Mem: e guarda la colonna libera. Considera questa come la quantità di RAM che puoi dedicare ad Apache, anche se di solito mi piace dedurre 2 GB su un server più robusto (come in> 4 GB) o 1 GB su un server più leggero. Quindi, se la colonna gratuita dicesse che avevo 13 GB gratuiti, consiglierei di dare Apache 11 GB. Questa è una base. Se si verificano occasionalmente problemi di database nei registri (come in circa 3 volte nei registri per un periodo di 3 giorni) che necessita di più memoria, potremmo considerare che avevamo solo 10 GB con cui giocare invece di 11 GB (in questo caso ). Se riscontriamo nei registri di Apache che il server ha bisogno di più MaxRequestWorkers, allora questo è un problema separato che affronterò di seguito.
- Avviare il server Web Apache.
sudo service apache2 start
Apri come 10 schede del browser, connettiti ad alcune delle tue pagine più lunghe o a caricamento lento dal tuo sito Web e aggiorna come 3-4 volte su ciascuna scheda.
Dopo averlo fatto, ora esegui rapidamente il seguente comando:
sudo ps -ylC apache2 | awk '{x + = $ 8; y + = 1} END {print "Utilizzo memoria Apache (MB):" x / 1024; stampa "Dimensione media del processo (MB):" x / ((y-1) * 1024)} '
Eseguilo come 5 volte rapidamente.
Osserva il valore della Dimensione media del processo e calcola la media di quel valore tra le 5 volte che l'hai eseguita.
Ora fai i seguenti calcoli matematici e assicurati di convertire GB in MB, se necessario, in modo che tutti i numeri siano in MB. Quindi, moltiplica per 1024 volte o dividi per 1024, a seconda del modo in cui devi procedere.
MaxRequestWorkers = Baseline Free (con spazio buffer) / Dimensione media del processo
Ad esempio, avevo un server da 14 GB, ma quando Apache è stato arrestato il server ha mostrato che utilizzava 1 GB di RAM in idle. Fornisco quindi altri 1 GB di spazio aggiuntivo nel buffer per il sistema operativo nel caso in cui ne abbia bisogno. Ciò significa che avrei un baseline gratuito di 12 GB. Ora devo convertirlo da GB a MB, quindi moltiplico 12 x 1024 e ottengo 12288. Il 12288 MB è il mio valore di base gratuito. Nel mio caso ho visto che la dimensione media del processo era di 21 MB. Quindi, prendo 12288/21 e ottengo circa 585. Ora, è comune che i sysops arrotondino per difetto questo valore, e quindi ho ottenuto 580.
- Modifica il file /etc/apache2/mods-enabled/mpm_prefork.conf e considera di impostarlo sui seguenti valori predefiniti, sostituendo XXX con il tuo calcolo MaxRequestWorkers:
`<IfModule mpm_prefork_module>`
StartServers 2
MinSpareServers 2
MaxSpareServers 5
MaxRequestWorkers XXX
ServerLimit XXX
MaxConnectionsPerChild 0
</IfModule>
Si noti che non è possibile visualizzare il parametro ServerLimit lì. Aggiungilo Per impostazione predefinita, questo parametro è 256 se non presente, ma deve avere lo stesso valore di MaxRequestWorkers o verrà visualizzato un errore.
Un altro fattore critico nella configurazione di Apache è il file /etc/apache2/apache2.conf con la variabile Timeout e viene misurato in secondi. Questo è quanto tempo è possibile inviare o ricevere dal server prima che scada. Devi anche tenere presente un caricamento di file o un download di file, ad esempio se hai un sito Web in cui le persone possono caricare o scaricare CSV o altri file di grandi dimensioni, ad esempio. E devi tenere a mente un server di database occupato e dove potresti dover fornire un po 'di tempo prima del timeout delle pagine. Più piccola è la variabile Timeout, più il web server è disponibile a ricevere nuove connessioni. Si noti, tuttavia, che l'impostazione di questo valore su un valore troppo basso può causare danni con le variabili della sessione PHP, sebbene non con i cookie basati sulla sessione del browser. Quindi, per esempio, un valore di 300 (5 minuti) potrebbe essere buono per un server Web che si basa su variabili di sessione PHP per il flusso di lavoro delle app Web anziché sui cookie di sessione del browser. Un valore di 45 potrebbe essere buono per un server web che non serve altro che pagine di destinazione pubblicitarie statiche, ma sarebbe terribile per un server che deve usare molto le variabili di sessione PHP. Quindi, modifica il parametro Timeout in questo file per l'importo necessario. Questo potrebbe richiedere alcuni test con tutte le tue pagine web per vedere se il valore è troppo basso. È probabilmente una buona idea, tuttavia, non impostarlo su un valore superiore a 300, a meno che non si riscontrino problemi nei caricamenti di file di grandi dimensioni o nei download di file di grandi dimensioni. ma sarebbe terribile per un server che deve usare molto le variabili di sessione PHP. Quindi, modifica il parametro Timeout in questo file per l'importo necessario. Questo potrebbe richiedere alcuni test con tutte le tue pagine web per vedere se il valore è troppo basso. È probabilmente una buona idea, tuttavia, non impostarlo su un valore superiore a 300, a meno che non si riscontrino problemi nei caricamenti di file di grandi dimensioni o nei download di file di grandi dimensioni. ma sarebbe terribile per un server che deve usare molto le variabili di sessione PHP. Quindi, modifica il parametro Timeout in questo file per l'importo necessario. Questo potrebbe richiedere alcuni test con tutte le tue pagine web per vedere se il valore è troppo basso. È probabilmente una buona idea, tuttavia, non impostarlo su un valore superiore a 300, a meno che non si riscontrino problemi nei caricamenti di file di grandi dimensioni o nei download di file di grandi dimensioni.
Ora riavvia il tuo servizio web Apache. Se hai fatto qualcosa di sbagliato, Apache probabilmente te lo dirà nel momento in cui lo avvii di nuovo, e puoi correggerlo.
sudo service apache2 restart
- Ora ripeti il trucco del browser con 10 schede che hai fatto in precedenza e vedi se riscontri errori di configurazione di Apache nel registro degli errori del web server Apache:
sudo tail -f /var/log/apache2/error.log
... premi CTRL + C per uscirne, se lo desideri.
Cerca un reclamo sulla necessità di MaxRequestWorkers (e recentemente da quando hai riavviato il web server). Se lo vedi anche con un'impostazione ottimale di MaxRequestWorkers, probabilmente avrai bisogno di più potenza di fuoco per i tuoi siti Web o applicazioni web. Considera queste opzioni:
- Utilizzo di un CDN per download di file di grandi dimensioni, immagini e script.
- Utilizzando un servizio di memorizzazione nella cache come CloudFlare o altri.
- Ripetere la strategia del tuo sito Web o dell'applicazione Web per utilizzare più server Web che fungono da "app Web" dietro un bilanciamento del carico.
- Aggiungendo più RAM al server e ripetendo così questo calcolo.
- Ora che il server Apache è ottimizzato, è una sorta di linea di base ottimizzata. Dovrai verificarlo nel corso di 2-3 settimane e cercare i problemi di MaxRequestWorker nei log degli errori di Apache. Da ciò, puoi prendere una decisione sull'ottimizzazione (vedi passaggio 10). Puoi anche installare Munin con apt su Ubuntu e guardare le prestazioni di Apache nel tempo e tracciare un'idea di crescita prima di decidere che devi fare qualcosa sulla quantità di traffico che il web server sta gestendo.