Hallo liebe Foren-Gemeinde,
ich habe einen sehr umfangreichen Crawler in .NET 4.5 geschrieben, welcher auf einem großen Root-Server läuft (128 GB Ram, 128 IPs).
Nun habe ich das Programm so konzipiert, dass ich ein Hauptprogramm habe (eigenständige .exe), von dem aus ich "Clients" aus starten und stoppen kann. (Die Clients sind jeweils ebenfalls eine WinForms .exe).
Leider ist es so, dass wenn ich insgesamt ungefähr 1500 Clients geöffnet habe das Hauptprogramm aus geht und auch Windows komplett ausgelastet ist und alles sehr verzögert durchgeführt wird. Sobald ich wieder einige Clients (Programme) schließe, wird Windows wieder bedienbar und alles Programme laufen komplett normal. Vor dieser Root-Server Lösung habe ich mehrere VPS (Virtuelle Maschinen) gehabt, auf denen die Clients verteilt liefen. Dort konnte ich ohne Probleme 3000 Clients verteilt öffnen ohne dass das Hauptprogramm instabil wurde. Jedoch musste ich dort zeitweise auf 50 VPS neue Updates installieren und die Wartungsarbeiten waren einfach nicht mehr machbar.
Nun möchte ich mir nicht die Arbeit machen und die Clients quasi als eigene Threads in das Hauptprogramm zu integrieren, weil ich dann befürchte das unsichtbares Thread-Blocking das ganze stark in der Performance reduziert.
Gibt es irgendwelche Limits, dass Windows 1500 gleiche Programme nicht mehr handlen kann? Ich habe TCP-Server Probleme schon ausgeschlossen, denn auch wenn ich das Ping-Verfahren zwischen Client und Server abgeschaltet habe und quasi die Clients unabhängig vom Hauptprogramm liefen, war bei 1500 Schluss. Wenn ich 2 Hauptprogramme starten und jeweils 750 Clients laufen lasse, ist es ebenfalls das Maximum und alles schmiert ab.
Ich habe mich die letzten Wochen intensiv darum bemüht, alles auf einen Root-Server auszulegen und ich hoffe ich habe das jetzt nicht komplett umsonst gemacht. Mir fällt auch irgendwie kein passender Suchbegriff für Google ein, weil wenn ich Max-Threads Windows eingebe, wird meistens auf das ThreadLimit von Threadpools verwiesen.
Vielleicht hat der ein oder andere eine Idee, was das Limit sein könnte.
Verwendete Technologien:
HttpClient (für Webrequests)
.NET.Sockets
Server:
Windows Server 2012 R2
128 GB Ram
Intel XeonE5-1650v26C 3,5 GHz+/3,9 GHz+
ich habe einen sehr umfangreichen Crawler in .NET 4.5 geschrieben, welcher auf einem großen Root-Server läuft (128 GB Ram, 128 IPs).
Nun habe ich das Programm so konzipiert, dass ich ein Hauptprogramm habe (eigenständige .exe), von dem aus ich "Clients" aus starten und stoppen kann. (Die Clients sind jeweils ebenfalls eine WinForms .exe).
Leider ist es so, dass wenn ich insgesamt ungefähr 1500 Clients geöffnet habe das Hauptprogramm aus geht und auch Windows komplett ausgelastet ist und alles sehr verzögert durchgeführt wird. Sobald ich wieder einige Clients (Programme) schließe, wird Windows wieder bedienbar und alles Programme laufen komplett normal. Vor dieser Root-Server Lösung habe ich mehrere VPS (Virtuelle Maschinen) gehabt, auf denen die Clients verteilt liefen. Dort konnte ich ohne Probleme 3000 Clients verteilt öffnen ohne dass das Hauptprogramm instabil wurde. Jedoch musste ich dort zeitweise auf 50 VPS neue Updates installieren und die Wartungsarbeiten waren einfach nicht mehr machbar.
Nun möchte ich mir nicht die Arbeit machen und die Clients quasi als eigene Threads in das Hauptprogramm zu integrieren, weil ich dann befürchte das unsichtbares Thread-Blocking das ganze stark in der Performance reduziert.
Gibt es irgendwelche Limits, dass Windows 1500 gleiche Programme nicht mehr handlen kann? Ich habe TCP-Server Probleme schon ausgeschlossen, denn auch wenn ich das Ping-Verfahren zwischen Client und Server abgeschaltet habe und quasi die Clients unabhängig vom Hauptprogramm liefen, war bei 1500 Schluss. Wenn ich 2 Hauptprogramme starten und jeweils 750 Clients laufen lasse, ist es ebenfalls das Maximum und alles schmiert ab.
Ich habe mich die letzten Wochen intensiv darum bemüht, alles auf einen Root-Server auszulegen und ich hoffe ich habe das jetzt nicht komplett umsonst gemacht. Mir fällt auch irgendwie kein passender Suchbegriff für Google ein, weil wenn ich Max-Threads Windows eingebe, wird meistens auf das ThreadLimit von Threadpools verwiesen.
Vielleicht hat der ein oder andere eine Idee, was das Limit sein könnte.
Verwendete Technologien:
HttpClient (für Webrequests)
.NET.Sockets
Server:
Windows Server 2012 R2
128 GB Ram
Intel XeonE5-1650v26C 3,5 GHz+/3,9 GHz+