Quali parametri del kernel o altre impostazioni controllano il numero massimo di socket TCP che possono essere aperti su un server Linux? Quali sono gli svantaggi di consentire più connessioni?
Durante il test di caricamento di un server Apache con ab ho notato che è abbastanza semplice massimizzare le connessioni aperte sul server. Se si interrompe l'opzione -k di ab, che consente il riutilizzo della connessione e si fa in modo che invii più di circa 10.000 richieste, Apache serve le prime circa 11.000 richieste e si interrompe per 60 secondi. Uno sguardo all'output di netstat mostra 11.000 connessioni nello stato TIME_WAIT. Apparentemente, questo è normale. Le connessioni vengono mantenute aperte per un valore predefinito di 60 secondi anche dopo che il client ha terminato di utilizzarle per motivi di affidabilità TCP .
Sembra che questo sarebbe un modo semplice per fare un server e mi chiedo quali siano le solite regolazioni e precauzioni per questo.
Ecco il mio risultato del test:
# ab -c 5 -n 50000 http://localhost/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 5000 requests
Completed 10000 requests
apr_poll: The timeout specified has expired (70007)
Total of 11655 requests completed
Ecco il comando netstat che eseguo durante il test:
# netstat --inet -p | grep "localhost:www" | sed -e 's/ \+/ /g' | cut -d' ' -f 1-4,6-7 | sort | uniq -c
11651 tcp 0 0 localhost:www TIME_WAIT -
1 tcp 0 1 localhost:44423 SYN_SENT 7831/ab
1 tcp 0 1 localhost:44424 SYN_SENT 7831/ab
1 tcp 0 1 localhost:44425 SYN_SENT 7831/ab
1 tcp 0 1 localhost:44426 SYN_SENT 7831/ab
1 tcp 0 1 localhost:44428 SYN_SENT 7831/ab