Il parametro principale per ottimizzare l'utilizzo della memoria di Apache sarà MaxClients
. Un valore troppo basso e si esauriranno gli slot disponibili per soddisfare le richieste dei clienti. Troppi e utilizzerai tutta la RAM e inizierai a utilizzare lo spazio di swap che ucciderà le prestazioni (potrebbe sembrare un arresto anomalo del server).
Un modo di sintonizzare MaxClients
è osservare l'utilizzo della memoria del sistema e modificare l'impostazione su / giù secondo necessità. Se il server inizia a scambiarlo, modificalo. Se il server ha memoria libera, installalo.
Puoi anche stimare il valore massimo osservando l'utilizzo della memoria di Apache. Avviare top
e premere M
per ordinare i processi in base alla memoria. Dovresti vedere qualcosa del tipo:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18698 apache 17 0 141m 59m 41m S 0.0 1.6 4:57.46 httpd
18591 apache 17 0 141m 59m 41m S 0.0 1.5 4:54.79 httpd
22917 apache 16 0 141m 57m 39m S 0.0 1.5 4:57.44 httpd
18595 apache 16 0 142m 57m 38m S 0.0 1.5 5:23.43 httpd
18697 apache 16 0 139m 56m 41m S 0.0 1.5 5:09.29 httpd
18735 apache 25 0 141m 56m 38m S 0.0 1.5 5:05.32 httpd
Sottrarre le colonne RES e SHR per ottenere l'utilizzo approssimativo della memoria per istanza di Apache. In questo caso è di circa 16 MB. Se ho 4 GB di RAM e desidero utilizzarne 3 per l'impostazione di Apache my MaxClients sarà disponibile:
MaxClients = 3000/16 = 188
Quindi, in questo caso, potrei iniziare con un valore di 150-200, ma osserverei l'utilizzo della memoria e se mai iniziasse ad avvicinarsi all'uso dello swap, ridurrei MaxClients del 10-20%. Si noti inoltre che il valore di 3 GB è solo un esempio casuale. Sui server che eseguono solo Apache potrei essere in grado di utilizzare quasi tutti i 4 GB. In altri casi potrei volere solo 1 o 2 GB per Apache, salvo il resto per altre applicazioni, il sistema o la cache.
Modifica: risposta a domande aggiuntive
Generalmente non ci sono valori magici di MaxClients o degli altri parametri di configurazione di Apache che renderanno il tuo server improvvisamente due volte più veloce. Alcuni server sembrano funzionare correttamente se MaxClients è 10 o 1000. Esistono due casi principali in cui l'impostazione MaxClients è "errata":
- Troppo basso : quando MaxClients è troppo basso raggiungerai una situazione in cui vengono utilizzati tutti i client Apache e le nuove connessioni entrano in una coda in attesa che il client successivo diventi disponibile. Se abiliti il mod_status di Apache puoi ottenere una vista in tempo reale di quanti client sono occupati in un dato momento. Questo stato è relativamente facile da diagnosticare poiché il sito diventerà lento durante i periodi di traffico intenso e si può osservare che tutti i client sono in uso.
- Troppo alto : quando MaxClients è troppo alto, ti accorgerai di esaurire tutta la RAM e inizierai a utilizzare lo scambio. In questo caso, le prestazioni del tuo sito scenderanno sostanzialmente a zero (considera la differenza di velocità tra RAM e disco). Questo stato può essere molto più difficile da osservare e diagnosticare poiché un server funzionerà perfettamente con un MaxClients elevato fino a quando non si verificherà un picco nel traffico. Ad esempio, su un sito che ottiene qualche hit all'ora posso impostare MaxClients su 1000, molto più che sopportabile dalla RAM, ma non ho mai visto un problema a causa di Apache che ha solo bisogno di usare uno o due client alla volta. Individuerò il problema solo quando avrò un picco nel traffico, aumentando il numero di client utilizzati contemporaneamente, fino a quando la RAM è esaurita e lo spazio di scambio è necessario.
Anche se non conosco i dettagli del tuo server, applicazione o traffico, posso suggerire i seguenti valori di configurazione come punto di partenza. Provali, monitora il carico e l'utilizzo del server e modifica le impostazioni secondo necessità.
- mod_status : abilita questa opzione in modo da poter vedere l'utilizzo di Apache. Per statistiche più avanzate installa un'applicazione di monitoraggio come Zabbix / Nagios in modo da poter monitorare l'utilizzo del server e i modelli di traffico.
- MaxClients : impostato su un valore di 100-200. Vorrei iniziare con un valore inferiore se non sono sicuro e monitorare l'utilizzo della memoria / CPU / Apache. Questo sarà il parametro principale da modificare.
- MaxRequestsPerChild : specifica quando verrà riavviato un client / figlio Apache. Non esiste un valore errato (sebbene valori molto piccoli possano essere inefficienti) e dipenderà dal contenuto che viene pubblicato. Per i contenuti dinamici un grande valore diverso da zero (diciamo 1000) impedirà ai tuoi processi httpd di diventare troppo grandi.
- Altri parametri : anche se non ho eseguito un benchmark completo dei parametri rimanenti, dovrebbero avere un effetto relativamente minore a meno che non li imposti su valori molto bassi o molto alti. L'uso delle impostazioni predefinite dovrebbe andare bene per la maggior parte dei siti. Consultare la documentazione del modulo Apork Prefork o Worker per una descrizione completa dei parametri e che viene utilizzata in ciascun modulo (non ha senso tentare di ottimizzare un parametro che non si utilizza).
- Benchmarking : mentre modifichi i parametri, ti consiglio di utilizzare uno strumento di benchmarking come ab (ApacheBench) o assedio per ottenere un numero quantitativo sulle capacità del tuo server. Fare affidamento esclusivamente su feel o peggio, vedere se si blocca o meno, non è un buon metodo per ottimizzare i parametri di un server web.