Ottimizzazione del prefork di Apache - Scelta del valore `MaxRequestsPerChild` corretto


9

Sto cercando di ottimizzare i nostri server Web per gestire il maggior numero possibile di connessioni. Ho letto molti post e le note di Apache. Sto cercando di capire per quale valore dovrei scegliere MaxRequestsPerChild.

Inizialmente, ho provato a impostarlo su 4.000, ma il server ha avuto difficoltà a gestire molte richieste, quindi ho iniziato a sollevarlo. Al momento le mie impostazioni sono:

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  40000
</IfModule>

Dopo aver impostato MaxRequestsPerChild40.000, il server è riuscito a gestire più connessioni senza utilizzare più memoria / CPU.

Qualcuno può dirmi per favore se questo valore è troppo alto o è ok per avere un valore così alto?

Grazie!

Informazioni sul sistema operativo:

[root@web06 ~]# uname -a
Linux web 2.6.18-164.el5PAE #1 SMP Thu Sep 3 04:10:44 EDT 2009 i686 i686 i386 GNU/Linux
[root@web06 ~]# free
             total       used       free     shared    buffers     cached
Mem:       3814660    3502968     311692          0     144368    2970468
-/+ buffers/cache:     388132    3426528
Swap:      5210104          0    5210104

Risposte:


10

MaxRequestsPerChildè davvero utile solo per limitare la quantità di perdita di memoria nel tempo durante l'esecuzione di script dinamici. Se stai solo offrendo contenuto statico o script molto piccoli / semplici, probabilmente puoi impostarlo su 0 o molto alto senza molto effetto. Se stai eseguendo script complessi / di grandi dimensioni, impostandolo su 0 / alto, i tuoi processi Apache consumeranno sempre più memoria. Esattamente quanto più dipende dalla tua specifica applicazione.

D'altra parte, impostarlo su un valore molto basso può effettivamente comportare un utilizzo leggermente maggiore della CPU poiché i processi Apache vengono costantemente riavviati.

Farei un semplice test per vedere quanta memoria possono usare i tuoi processi. Impostare MaxRequestsPerChildsu 0 e riavviare Apache. Prova a caricare alcune pagine e vedi quali sono le dimensioni iniziali dei processi Apache top. Controlla di nuovo dopo alcune ore / giorni / settimane (a seconda dell'applicazione e delle visualizzazioni di pagina) e vedi come cresce. Se non cresce molto allora un valore 0 o molto grande per MaxRequestsPerChilddovrebbe andare bene.

Se hai una dimensione massima impostata per i tuoi processi Apache (ovvero, vuoi che siano 50 MB o meno), puoi fare lo stesso test con vari valori MaxRequestsPerChildfino a quando non trovi un valore che mantiene Apache inferiore a quello.


1
Come posso testare caricare le pagine e vedere la dimensione dei processi Apache usando Windows Server?
Ahmad Alfy,
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.