Welche Kernelparameter oder andere Einstellungen steuern die maximale Anzahl von TCP-Sockets, die auf einem Linux-Server geöffnet sein können? Was sind die Kompromisse, wenn mehr Verbindungen zugelassen werden?
Beim Auslastungstest eines Apache-Servers mit ab ist mir aufgefallen, dass es ziemlich einfach ist, die offenen Verbindungen auf dem Server zu maximieren. Wenn Sie die Option -k auslassen, die die Wiederverwendung der Verbindung ermöglicht, und mehr als 10.000 Anfragen senden, werden die ersten 11.000 Anfragen von Apache bearbeitet und 60 Sekunden lang angehalten. Ein Blick auf die netstat-Ausgabe zeigt 11.000 Verbindungen im Status TIME_WAIT. Anscheinend ist das normal. Aus Gründen der TCP-Zuverlässigkeit werden Verbindungen standardmäßig 60 Sekunden lang geöffnet gehalten, auch nachdem der Client sie beendet hat .
Es scheint, als wäre dies eine einfache Möglichkeit, einen Server zu tun, und ich frage mich, wie die üblichen Einstellungen und Vorsichtsmaßnahmen dafür aussehen.
Hier ist meine Testausgabe:
# 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
Hier ist der Befehl netstat, den ich während des Tests ausführe:
# 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