viele HttpRequests - Adapter überlastet?

robinlench

Mitglied
Guten Abend.
Für einen Proxy-Tester sende ich sehr viele Anfragen an ein Webscript, um die Erreichbarkeit zu überprüfen. Sende ich über einen gewissen Zeitraum sehr viele dieser Http-Requests, so scheint nicht nur der Server des Webscriptes meine Anfragen zu blockieren, sondern der ganze Netzwerk-Adapter scheint überlastet zu sein. Ist das möglich? Ich kann dann für einen gewissen Zeitraum zum Beispiel keine Webseiten im Browser mehr öffnen, erst nach mehreren Minuten (teilw. auch länger) erst wieder das Internet nutzen. Ich kann in meiner Anwendung die Zahl der gleichzeitigen Threads regulieren, muss aber wissen wie diese Überlastung zustande kommt bzw. wieviele Anfragen ich machen kann.
Vielen Dank für Eure Hilfe.
 

robinlench

Mitglied
Meine Frage war, ob es generell möglich ist, dass ein Adapter o.ä. wegen zu vieler gestarteter Requests überlastet werden kann. "Sehr viele" kann hier mehrere hundert sein, es geht aber eigentlich um das kontinuierliche Starten solcher Requests. Etwa 100-300 Threads, manche brauchen etwas länger wenn der angefragte Proxy nicht erreichbar ist etc. Das Problem tritt ja nicht sofort auf, sondern nach mehreren Minuten bis schätzungsweise 30 Minuten (dauerhaften Requests).
 

tagedieb

Top Contributor
Die Performance haengt stark von der verwendeten Hardware und Netzwerkbandbreite ab. Was du da beschreibst erinnert mich an eine Denial of Service Attacke.

Ansonsten lies mal die empfohlenen Performance-Einstellungen fuer deine Server durch.
Grob geschaetzt meine ich dass 300 Threads auf dem Server das System eher verlangsamen. Wieviele Prozessoren hast du den zur Verfuegung? Und welcher Server ist ueberhaupt ueberlastet? Der Server oder der Proxy???
 

robinlench

Mitglied
Vielen Dank für Eure Antworten erstmal. Es scheint mir, dass das Problem noch nicht ganz klar ist. Eine DOS-Attacke betrifft doch nur den einen Server, an den die Requests gehen, oder?
Die Prozessorauslastung bei 300 Threads ist bei meinem Dual-Core eher gering und fällt nicht ins Gewicht. Selbst wenn der Server, an den die Requests gehen, überfordert ist, so würde er meine Anfragen vielleicht blocken und keine Antworten mehr senden. Soweit so gut, aber wenn das Problem auftritt, lässt sich KEIN Server mehr ansprechen, ich kann also weder Google noch eine andere Webseite öffnen, welche mit den Requests überhaupt nichts zu tun hat. Komischerweise funktionieren andere Protokolle wie Skype oder MSN noch.
Meine Vermutung wäre, dass irgendwie das Netzwerkprotokoll bzw. der Adapter überlastet ist, also weder der Server, mein System oder der Proxy...
 

robinlench

Mitglied
Ich benutze Windows 7. Anscheinend blockiert ja mein System. Wenn Windows gleichzeitige Requests auf denselben Server limitiert, müsste das aber dadurch sichtbar werden, dass nur dieser Server dann blockiert. Es "reagiert" aber dann überhaupt kein Server mehr (sagen wir ich Requeste bei www.test1.de", so "reagiert" auch "www.2test.de" nicht mehr, auch wenn ich vorher überhaupt keine Requests dort gemacht habe). Daher muss diese "Request-flut" auf einen Server irgendwie das ganze System beeinflussen...
 

tagedieb

Top Contributor
Die Wege des Bill Gates sind unergruendlich :D

Hier spielen viele verschiedene bekannte und unbekannte Faktoren eine Rolle.
Wenn z.B. im IE eine Webpage blockiert kann ich auch keine andere Seite mehr aufmachen, da der gesamte IE blockiert ist.

Windows ist nicht gerade bekannt fuer seine Zuverlaessigkeit oder Stabilitaet. Windows ist jedoch Benutzerfreundlich und "das" OS fuer PC-Games :applaus:
 
T

tuxedo

Gast
Eine andere Möglichkeit:

Windows lässt nur eine begrenzte Anzahl an Ports zu die man gleichzetig öffnen kann. AFAIk 1024 oder sowas. Wenn du dann noch die Sockets nicht sauber wieder schließt, hängen die in einem WAIT Status rum und warten darauf vom OS abgeräumt/endgültig geschlossen zu werden. Bei so vielen Threads und Anfragen "könnte" es sein, dass schlicht alle zur Verfügung stehenden Ports sozusagen belegt sind. In Windows dauerts glaub mehrere Minuten bis so ein Port im WAIT Status wieder freigegeben wird.

Such mal bei google nach dem Tool "Sysinternals TCPView". Damit kannst du dir recht schick die belegten Ports anzeigen lassen.

Alles in allem: Ein "Nicht Windows-Server" OS ist für solch massive Portnutzung nicht gedacht. Entweder schränkst du dann deine Portnutzung ein und achtest darauf alles feinsäuberlich zu schließen, oder du wechselst zu einem OS das für solche AKtivitäten eher gedacht ist.

- Alex
 

Empire Phoenix

Top Contributor
Klingt doch bekannt,
wahrscheinlich DOS'd du gerade deinen Router da der tendenziel das schwächste gleid inner kette ist.
(ein fritzbox btw?, weil die können das garnet ab)
 

robinlench

Mitglied
Vielen Dank für Eure Antworten.

Eine andere Möglichkeit:

Windows lässt nur eine begrenzte Anzahl an Ports zu die man gleichzetig öffnen kann. AFAIk 1024 oder sowas. Wenn du dann noch die Sockets nicht sauber wieder schließt, hängen die in einem WAIT Status rum und warten darauf vom OS abgeräumt/endgültig geschlossen zu werden. Bei so vielen Threads und Anfragen "könnte" es sein, dass schlicht alle zur Verfügung stehenden Ports sozusagen belegt sind. In Windows dauerts glaub mehrere Minuten bis so ein Port im WAIT Status wieder freigegeben wird.

Such mal bei google nach dem Tool "Sysinternals TCPView". Damit kannst du dir recht schick die belegten Ports anzeigen lassen.

Alles in allem: Ein "Nicht Windows-Server" OS ist für solch massive Portnutzung nicht gedacht. Entweder schränkst du dann deine Portnutzung ein und achtest darauf alles feinsäuberlich zu schließen, oder du wechselst zu einem OS das für solche AKtivitäten eher gedacht ist.

- Alex

Ich habe mit TCPView mal die Verbindungen überprüft. Da das Problem auch mit der Software "ProxyFire", einem Proxy-Testprogramm auftritt, habe ich zum "professionelleren" Test mal dieses genommen. 500 Threads eingestellt, die Software öffnet sehr viele Verbindungen auf immer inkrementierenden Portnummern, alle mit Status "Syn-...", welche aber auch wieder geschlossen werden. Auf Dauer habe ich etwa 1500-1600 "Endpoints", bis das System jede weitere Anfragen verweigert. Daher klingt mir deine Aussage mit ca. 1k Ports sehr plausibel.

Klingt doch bekannt,
wahrscheinlich DOS'd du gerade deinen Router da der tendenziel das schwächste gleid inner kette ist.
(ein fritzbox btw?, weil die können das garnet ab)

Tatsächlich ist es eine Fritzbox (Speedport W920v, technisch identisch soweit ich weiss). Wenn mein System aufgibt, betrifft das aber nicht andere System im Netzwerk, die ebenfalls über diesen Router im Internet sind. Auf anderen PC's läuft das Internet dann einwandfrei.

Damit erklärt sich auch, dass Instant-Messenger noch funktionieren, da diese eine dauerhafte Verbindung aufrecht halten, welche schon vor meinem "Spam" bestand.

Zur Lösung des Problems: da Java ja plattformunabhängig ist, wie sieht es mit Linux aus? Gibt es dort auch solche "Port-Probleme"?
Ich verwende den Apache Http-Client. Lassen sich damit Verbindungen nach einem gewissen Timeout wieder schliessen (richtig schliessen)?
Und bei Windows: müsste ich dann also die Thread-Anzahl an diese 1024 Ports anpassen?
 

thewulf00

Bekanntes Mitglied
Ach noch was:
Die OS'e, mit denen ich bisher zu tun hatte (Linux, Windows), lassen einen OS-Socket (definiert sich durch Absender-IP+Port und Empfänger-IP+Port), auch wenn er von Dir ordentlich geschlossen wurde, noch eine Weile im Cache rumliegen, damit er reused werden kann. Bei Linux ist diese Cache-Time etwas über 3 Minuten, bei Windows XP war sie damals weit drüber.
Wenn du nun kontinuierlich Verbindungen auf- und abbaust, dann haust Du das Verbindungslimit (wie andere bereits beschrieben haben) voll, selbst wenn Du diese Verbindungen wieder abbaust.

Das hat rein garnichts mit DoS oder Deiner Fritzbox zu tun, sondern ist lediglich eine Sache des Betriebssystems.

Eine Lösung ist hier schwer zu raten. Entweder das OS wechseln, oder eine Virtualisierungslösung installieren und mit mehreren Betriebssystemen die Abfragen parallel durchführen.
 

Ähnliche Java Themen

Neue Themen


Oben