Al momento ho un server Apache2 in esecuzione con mpm-preforke mod_phpsu 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 MaxClientssu 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 absul mio computer desktop richiedendo la pagina principale da un blog wordpress.
Quando corro abcon 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 abcon 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' TimeOutimpostazione 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 abpossa uccidere da solo un server web semplicemente impostando le connessioni simultanee ai server MaxClients.