Wir hatten in der letzten Woche eine Reihe sehr interessanter Diskussionen auf unserer Techliste, also dachte ich, es wäre das Beste, so schnell wie möglich damit anzufangen. Der Grund, warum ich dieses Thema ausgewählt habe, ist, dass es sich um ein sehr technisches Thema handelt, über das man online nur sehr schwer Informationen finden kann. Oh, und zur Abwechslung geht es mal nicht um Java oder Agile!
Dieser Thread ist schnell auf etwa 20 Mails angewachsen, daher habe ich eine Auswahl getroffen, um ihn lesbar zu halten.
| Von | Wilco Koorn |
|---|
| Betreff: | Magische Zahl 28232?? |
|---|
| Datum | August 13, 2007 18:48:40 |
|---|
|
Hallo,
Ich führe einen Stresstest für ein System durch, das Socket-Kommunikation verwendet.
Ich habe einen Client, der folgenden Unix-Befehl verwendet:
for i in `seq 1 100000`; do nc -v 192.168.50.25 8910 & echo $i; done
Oder anders gesagt, ich versuche, 100.000 Verbindungen zu etwas herzustellen, das auf der Box 192.168.50.25, Port 8910, lauscht.
Ich habe eine Möglichkeit (über ein Web-Interface) auf der Box 192.168.50.25, die Verbindungen zu zählen. Alles ist gut, bis ich die Zahl 28232 erreiche. Wenn ich diesen Befehl von einer anderen Box aus ausführe, sehe ich mehr als 28.232 Verbindungen
Ich möchte wissen, wie hoch diese Zahl ist. Es muss ein Limit auf dem "Client"-Rechner geben (es ist weder die maximale Anzahl der offenen Dateien noch die maximale Anzahl der Prozesse). Vielleicht im Netzwerk?
|
| Von | Erik Rozendaal |
|---|
| Betreff: | Magische Zahl 28232?? |
|---|
| Datum | August 13, 2007 21:50:40 |
|---|
|
Wie sieht die Ausgabe auf dem Client aus? Eine Sache, die man tun könnte, ist die maximale Länge der Befehlszeile... auf einigen Unixen auf ~64k begrenzt. Es könnte also sein, dass die `seq 1 100000` nur bis zu 28.232 Mal erweitert wird, bevor sie an diese Grenze stößt.
|
| Von | Erik Jan de Wit |
|---|
| Betreff: | Magische Zahl 28232?? |
|---|
| Datum | August 14, 2007 7:49:42 |
|---|
|
Unter Unix werden Socket-Verbindungen durch die Anzahl der Dateien begrenzt, die gleichzeitig geöffnet sein können (z.B. Anzahl der geöffneten Dateien) Es gibt mehrere Stellen, an denen Sie dieses Limit finden können:
1. In /etc/security/limits.conf
* soft nofile 1024
* hard nofile 65535
2. Erhöhen Sie ulimit mit "ulimit -n 65535"
3. echo 65535 > /proc/sys/fs/file-max
4. In /etc/sysctl.conf
fs.file-max=65535
Aber warum wollen Sie, dass 100.000 Verbindungen gleichzeitig geöffnet sind, wenn normalerweise Verbindungen gepoolt werden?
|
| Von | Wilco Koorn |
|---|
| Betreff: | Magische Zahl 28232?? |
|---|
| Datum | August 14, 2007 9:52:42 |
|---|
|
Alle,
Es ist konsistent. Es handelt sich auch NICHT um ein Dateiverwaltungs-Dingsbums (ich hatte das schon einmal bei 1024 und wir haben es auf das Maximum gebracht).
Ich habe diese Grenze mit zwei verschiedenen Testmethoden festgestellt. Es tritt sogar auf, wenn wir zwei Rechner haben, auf denen die Clients laufen und die sich im selben Subnetz befinden, was auf Netzwerk-/Router-/Firewall-Probleme hindeuten könnte.
Ich interessiere mich besonders für die Zahl 28232. Sie ist nicht 32k - 4k. Das könnte mir einen Hinweis darauf geben, was hier passiert.
Vielen Dank, Wilco.
|
| Von | Silvester van der Bijl |
|---|
| Betreff: | Magische Zahl 28232?? |
|---|
| Datum | August 14, 2007 10:10:09 |
|---|
|
Wilco,
Das ist der für das Betriebssystem verfügbare Portbereich. Siehe https://permalink.gmane.org/gmane.comp.linux.lvs.user/4808.
Kurzversion:
/proc/sys/net/ipv4/ip_local_port_range ist "32768 61000"
61000 - 32768 = 28232 maximal verfügbare Ports für ausgehende Verbindungen.
Sie können den Portbereich erhöhen, um mehr gleichzeitige ausgehende Verbindungen zu ermöglichen. Wenn ich mich richtig an Ihre Präsentation erinnere, wäre das für die Produktionseinrichtung kein Problem (der Client öffnet nur 1 Verbindung zu einem einzigen Serverport).
Vielen Dank,
Silvester
|
| Von | Wilco Koorn |
|---|
| Thema | Magische Zahl 28232?? Gelöst!!! |
|---|
| Datum | August 14, 2007 10:17:14 |
|---|
|
Hallo,
Die magische Zahl 28232, auf die ich stoße, wird in der Tat durch den Bereich der Ports verursacht, die netcat zur Verfügung stehen.
Siehe:
sysctl -a | grep port
->
net.ipv4.ip_local_port_range = 32768 61000
Und, 61000 - 32768 = 28232!!!!
Vielen Dank für die Hilfe, Gruß, Wilco
|