Al momento ho un server Apache2 in esecuzione con mpm-prefork
e mod_php
su un VPS OpenVZ con 512 MB di RAM reale / 1024 MB (senza scambio). Dopo aver eseguito alcuni test, ho scoperto che la dimensione massima del processo che Apache ottiene è 23M, quindi ho impostato MaxClients
su 25 (23M x 25 = 575 MB, ok per me). Ho deciso di eseguire alcuni test di carico sul mio server e i risultati mi hanno lasciato perplesso.
Sto usando ab
sul mio computer desktop richiedendo la pagina principale da un blog wordpress.
Quando corro ab
con 24 connessioni simultanee, tutto sembra a posto. Certo, la CPU si alza, la RAM libera si riduce e il risultato è un tempo di risposta di circa 2-3 secondi per richiesta.
Ma se corro ab
con 25 connessioni simultanee (il mio limite del server), Apache si blocca dopo un paio di secondi. Inizia l'elaborazione delle richieste, quindi smette di rispondere, la CPU torna al 100% inattiva e scade ab
. Il registro di Apache dice che ha raggiunto MaxClients
.
Quando ciò accade, Apache si mantiene bloccato con 25 processi in esecuzione (sono tutti in "W" se controllo lo stato del server) e solo dopo l' TimeOut
impostazione i processi iniziano a morire e il server inizia a rispondere di nuovo (nel mio caso è impostato a 45).
La mia domanda: è questo comportamento previsto? Perché Apache muore appena raggiunge MaxClients
? Se funziona con 24 connessioni, non dovrebbe funzionare con 25, impiegando forse più tempo per rispondere a ogni richiesta e fare la fila per il resto?
Mi sembra un po 'strano che qualsiasi bambino che corre ab
possa uccidere da solo un server web semplicemente impostando le connessioni simultanee ai server MaxClients
.