sviluppo-web-qa.it

Valori ottimali per le direttive ServerLimit, MaxClients, MaxRequestsPerChild

Sto gestendo un sito a traffico intenso con molti contenuti dinamici, per lo più generati dagli utenti.

Il server è dedicato e dispone di un totale di 4 processori Intel (R) Xeon (R) CPU X3210 @ 2.13GHz. Devo conoscere i valori ottimali per le direttive ServerLimit e MaxClients di Apache, considerando che il server ha 4 GB di RAM e il database MySQL funziona su un server separato. Il pannello è DirectAdmin con CentOS.

Di seguito sono riportate le mie direttive attuali, ma durante le ore di punta con oltre 5k utenti, si nota un ritardo importante - e non è del tutto colpa di MySQL, perché le pagine sembrano essere generate velocemente (ho implementato un contatore del tempo di generazione della pagina), ma c'è un lungo ritardo della connessione fino a quando la pagina non inizia a rispondere e non viene inviata al browser.

<IfModule prefork.c>
    StartServers     800
    MinSpareServers   20
    MaxSpareServers   60
    ServerLimit      900
    MaxClients       900
    MaxRequestsPerChild  2000
</IfModule>
Timeout 90
KeepAlive On
KeepAliveTimeout 5

Devo dire che il monitoraggio del server utilizzando il comando top, l'utilizzo della CPU non va mai oltre il 20% ~ 30% nelle ore di punta. Il server MySQL ha anche un utilizzo del 30 ~ 50% in quel momento, e lavoro costantemente per risolvere le query lente, ma questo è un problema diverso. So che non è un collo di bottiglia del DB perché anche le pagine statiche impiegano molto tempo a caricarsi nelle ore di punta.

Eventuali suggerimenti per ottimizzare questi valori saranno molto apprezzati, grazie.

29
andreszs

Il tuo MaxClients è MODO MODO troppo alto. Qual è la dimensione attuale del processo Apache? Moltiplica quella x 900. È maggiore di 4 GB? In tal caso, è probabile che la macchina venga scambiata. Di solito inizio con MaxClients = 2x vCPU nella confezione (grep -c processor/proc/cpuinfo). Che in questo caso sarebbe circa 8. Quindi assicurati che le dimensioni del processo MaxClients x Apache non superino i 4 GB.

Puoi caricare i tuoi MaxClients da lì, a seconda del tipo di connessione che hanno i tuoi clienti. (Gli utenti dial-up devono essere falsificati, ecc.) Ma assicurati di non trovarti mai in una situazione di scambio.

Quindi impostare i server Min, Max e Start su MaxClients. Non è necessario differenziarli in un ambiente server dedicato.

Quindi esegui alcuni test con ab (come note d'oca).

24
toppledwagon

È necessario ottenere la dimensione media del processo Apache. Con questo numero e la dimensione totale del tuo RAM puoi calcolare la direttiva MaxClients. Ricorda questo: "Un server web non dovrebbe mai scambiarsi" ( Apache Performance Tuning )

Il monitoraggio con top o htop è ok ma hai bisogno di una migliore visualizzazione di tutte le statistiche dei tuoi server (CPU, RAM, I/O su disco, richieste Apache, query lente mysql, ecc ...) con alcuni strumenti di monitoraggio come ganglia o munin per trovare possibili colli di bottiglia.

5
hdanniel

Consiglio di giocare con lo strumento benchmark (ab) di Apache. Puoi giocare con i valori per abbinarli al tuo flusso di traffico e vedere che tipo di risposte stai ricevendo per quanto riguarda il tempo di caricamento medio e simili. A quel punto puoi giocare con le impostazioni di cui stai parlando per provare a ottimizzarle. Dovresti essere in grado con ab di ottenere una gestione delle prestazioni ottimali per ogni performance Tweak.

Non sarebbe davvero prudente per me parlare delle tue impostazioni, tuttavia devi anche prendere in considerazione il tuo RAM perché sembra che stai mangiando molto RAM con quelle impostazioni. Anche se questa è solo una speculazione senza dati. htop ti dà una buona lettura visiva delle tue risorse.

Anche la tua media di carico potrebbe dire molto. Dubito che il tuo utilizzo sia molto superiore alla quantità totale di core dal 20-30% della CPU, ma è un altro indicatore di quanto il tuo server stia effettivamente lavorando.

4
goose