Ottimizzazione dell'utilizzo della memoria di Apache


11

Apache utilizza troppa memoria del mio server causandone l'arresto anomalo. Ho 4 GB di RAM nel server.

Sto cercando di mettere a punto le impostazioni di Apache per migliorare le sue prestazioni, ma sono abbastanza nuovo in questo.

Stavo cercando di seguire il consiglio di questo articolo ma non sono sicuro di come calcolare le cose e sembra che sto peggiorando le cose.

La mia parte superiore recita come:

11697 apache    15   0  322m  37m 4048 S  0.0  0.9   0:00.52 httpd
13602 apache    15   0  323m  37m 3944 S  0.0  0.9   0:00.50 httpd
11786 apache    15   0  322m  36m 4052 S  0.0  0.9   0:00.50 httpd
12525 apache    15   0  322m  36m 4040 S  0.0  0.9   0:00.63 httpd
11806 apache    15   0  322m  36m 3952 S  0.0  0.9   0:00.42 httpd
11731 apache    15   0  322m  36m 4036 S  0.0  0.9   0:00.46 httpd
11717 apache    16   0  322m  36m 3956 S  0.0  0.9   0:00.54 httpd
11659 apache    15   0  322m  36m 3980 S  0.0  0.9   0:00.49 httpd

Quindi sarebbe

MaxClients = 3000/ (322-37) = 10

È giusto? Inoltre, quali dovrebbero essere i valori per gli altri parametri come MinSpareServers, MaxSpareServers, MaxRequestsPerChild, StartServers, MinSpareThreads, MaxSpareThreads, ThreadsPerChild, MaxRequestsPerChild?

Qualcuno potrebbe aiutarmi?

Aggiornare

Ho provato quello che voi ragazzi avete suggerito. Funziona, ma solo per un po '. Dopo qualche tempo dall'avvio del server, l'utilizzo della memoria continua ad aumentare e non diminuisce mai.

Voglio dire, dopo aver avviato il server, supponiamo che ci siano 500 utenti online. Il server consumerà X RAM. 2 ore dopo, con gli stessi 500 utenti online, il server consumerà 10 volte RAM.

C'è un modo per evitarlo o dovrò continuare a guardare il server e riavviarlo di tanto in tanto?


1
quando aggiungi aggiornamenti alla tua domanda, modifica l'originale anziché pubblicare una risposta. Questo ha anche l'ulteriore vantaggio di portare di nuovo la domanda in cima alla prima pagina.
Ben Pilbrow,

Risposte:


14

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 tope premere Mper 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.

MaxClients è stato rinominato in MaxRequestWorkers a partire da Apache 2.4.
Jastram,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.