Windows 2003 server-socket error 10055
Ich lief eine sehr große Applikation auf einem Windows 2003 server. Es schafft fast 900 threads und einen einzelnen thread, der auf einem sockel. Es ist eine C++ - Anwendung, die ich hatte, kompiliert mit Visual Studio-Umgebung.
Nach fast 17-20 Stunden des testens, bekomme ich den socket error 10055 beim versenden der Daten.
Abgesehen von diesem Fehler, meine Anwendung läuft hervorragend ohne irgendwelche Fehler oder Problem. Es ist ein quad core system mit 4 GB RAM hat und diese Anwendung nimmt etwa 30-40% CPU (auf allen 4 CPUs) in all seinen Betrieb.
Kann hier jemand helfen, mich zu passieren. Ich hatte gesucht, fast alles auf google zu diesem Fehler, konnten aber nicht alles relevante zu meinem Fall.
InformationsquelleAutor pjain | 2011-06-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es ist unmöglich zu sagen, mo als:
http://kbase.pscs.co.uk/index.php?article=93
https://wiki.pscs.co.uk/how_to:10055
InformationsquelleAutor Anton Semenov
Habe ich dieses symptom gesehen, bevor Sie in einer IOCP-socket-system. Ich musste Gas ausgehenden asynchronen socket sendet, so dass nicht zu viel Daten bekommt in der Warteschlange im kernel warten, gesendet zu werden, auf den sockel.
Obwohl der Fehler text sagt, dies geschieht aufgrund der Anzahl von verbindungen, das ist nicht meine Erfahrung. Wenn Sie schreiben, eine enge Schleife zu tun async sendet auf einem einzelnen sockel, ohne Drosselung, die Sie schlagen können diese sehr schnell.
Vielleicht @Len Holgate hat etwas hier hinzufügen, er ist mein "goto-guy" für Windows sockets Probleme.
Holgate können Sie mir bitte helfen?Ich bin noch nicht in der Lage diese zu lösen.Ich hatte auch versucht, mit Hilfe TCP_NO_DELAY für die Aktivierung senden Sie die Daten, sobald Sie haben aber immer noch das Problem weiterhin besteht.
InformationsquelleAutor Steve Townsend
Dass teilweise Ihr problem. Jeder thread wird wahrscheinlich mit der default 1MB stack. Sie beginnen sich zu nähern ein GB-thread-overhead. Chancen der Speicher ausgeht, sind hoch. Der springende Punkt bei der Verwendung von IOCP ist, so dass Sie nicht haben, um eine "thread pro Verbindung". Sie können erstellen Sie einfach mehrere threads (von 1x - 4x die Anzahl der CPUs) zu hören, die auf das completion-port-handler, und jeder thread-Dienst einer anderen Anfrage zum maximieren der Skalierbarkeit.
Ich erinnere mich an das Lesen einer verlinkten Artikel aus der Stack-Überlauf, der Puffer, die Sie veröffentlichen, für ausstehende IOCP-Operationen sind so eingerichtet, dass das Betriebssystem WIRD NICHT zulassen, die Speicher tauschen sich aus dem physikalischen Speicher auf der Festplatte. Und dann kann man ausführen, dass der system-Ressourcen, wenn die Anzahl von verbindungen wird high.
Den workaround, wenn ich mich Recht erinnere, ist die post eine 0-byte-Puffer (oder war es ein 1-byte-Puffer) für jeden socket-Verbindung. Wenn Daten ankommen, Ihre completion-port-handler zurück, und das ist ein Tipp, um deinen code zu posten einen größeren Puffer. Wenn ich den link dort hin finden, werde ich es teilen.
InformationsquelleAutor selbie