Guten Tag.
ich bekomme immer folgende Fehlermeldung, wenn ich den Apache Benchmark wie folgt laufen lasse.
ab -n 50000 -c 1000 webseite
apr_socket_connect: No buffer space available
Der Server hat 32GB Arbeitsspeicher - am Speicher darf es also nicht liegen.
So ich das richtig überblicke (ich habe es mir auch gerade erst im Detail angelesen), werden seitens der Anwendung geschlossene Verbindungen noch eine Weile von der TCP-Schicht am Leben gehalten, um sicherzustellen, dass sämtliche Pakete das Netzwerk korrekt durchlaufen haben, also protokollgemäß entweder von der jeweiligen Gegenstelle angenommen oder abgelehnt wurden, oder unterwegs verreckt sind.
Milchmädchentheorie 1:
Ein Endpunkt einer TCP-Verbindung verbraucht unter Linux standardmäßig etwa 200 KByte an Speicher, bei 1000 gleichzeitigen Verbindungen zu einem anderen Rechner wären das schon mal 200 MByte.
Je nachdem, wie schnell dein System ist, verbrauchst du also im Extremfall 200 KByte * (1.000 aktive Sockets + 49.000 sterbende Sockets) = 10 GByte an Speicher. Dies wohlgemerkt alleine für die Sockets und nur für eine Seite. Führst du ab und den Server auf demselben Rechner aus, sind es 20 GByte, denn zu jeder Verbindung gehören logischerweise zwei Endpunkte.
Obendrauf kommt noch der Speicherverbrauch für die 1000 bzw. 2000 (ab + Server) Prozesse oder Threads. Und den ganzen Nicht-Webserver-Rest, der ja auch noch läuft.
Sicherlich ist da bis 32 GByte noch Luft nach oben, aber die fünf Tastendrücke für einen Blick auf die Speicherbelegung dürften trotzdem zu rechtfertigen sein.
Milchmädchentheorie 2:
Du verbrätst in besagtem Extremfall 50.000 bzw. 100.000 (ab + Server) Portnummern. Die 50.000 kriegst du vielleicht noch in den 64k, die das Protokoll hergibt, unter, 100.000 aber sicher nicht. Auch hier: Ein Blick in die Konsole kann man wagen, ss ist dein Freund.
Wer hat mir einen Tipp, was eventuell falsch konfiguriert wurde.
Leider weiß ich nicht, an welcher "Schraube ich schrauben" kann/soll/darf.
Mein Tipp: Etwas ruhiger angehen lassen.