Laden...

IIS 7.5 Timeout-Problem [gelöst]

Erstellt von mosspower vor 11 Jahren Letzter Beitrag vor 11 Jahren 2.575 Views
mosspower Themenstarter:in
456 Beiträge seit 2007
vor 11 Jahren
IIS 7.5 Timeout-Problem [gelöst]

Hallo,

ich "erleide" seit ca. einer Woche ein sonderliches Verhalten meiner Anwendung und dachte, hier kann mir ggf. jemand helfen - die Problematik tauchte vorher nie auf, das Programm lief ohne Probleme über ein halbes Jahr bis jetzt.

Folgende Problematik: Ein Client schickt BASE64 encoded Daten (via HTTP-POST) an einen Rechner (IIS 7.5) und dort werden die Daten weiterverarbeitet. Die Länge der Zeichen im POST sind unterschiedlich je nach Befehl, jedoch max. 5000 Zeichen. Benutze ich nun das System mehrere Studen nicht mehr (z.B. über Nacht ect.) dann stelle ich aktuell jeden Tag folgendes Verhalten fest:

Bei einem Befehl (PING) funktioniert alles noch wie erwartet aber bei allen anderen Befehlen bekomme ich einen Timout-Fehler. Der PING-Befehl ist von den Zeichen her der Befehl mit dem kleinsten Payload - ggf. kann es daran liegen? ... IIS logged bei den Timeout nichts, bei PING-Befehl schon, da geht ja auch alles - es scheint, dass bei den Timouts überhaupt nichts beim Rechner ankommt. Komischerweise kann ich auch IIS nicht beenden, bzw. Neustarten - er dreht dann einfach ewig und macht nix. Das einzige, was hilft, ist ein kompletter Neustart des Rechners, dann funktioniert alles wieder und das für Stunden (4 bis 10 je nach Gebrauch) - lass ich dass dann wieder ein paar Stunden in Ruhe, geht alles wieder von vorne los.

Was kann das denn jetzt sein - hat jemand eine Idee, bzw. schon einmal ein ähnliches Verhalten festgestellt - ich bin am verzweifeln hier, weil das ja wirklich "unglaublich" ist, was da geht, bzw. nicht geht.

Programmfehler ist ausgeschlossen, weil es nicht nur vorher ein halbes Jahr ging, nein, es laufen auch noch aktuell 6 andere "Empfangsrechner", bei denen konnte ich ein derartiges Verhalten noch nie feststellen.

Kann es ggf. am Internet-Provider, Einstellungen Router ect. liegen? ... ich weiß nicht weiter - aktuell starte ich einfach den Rechner neu und gut ist - natürlich soll das keine Dauerlösung sein.

Danke schon mal für Hilfe und Anregungen im Voraus!

16.806 Beiträge seit 2008
vor 11 Jahren

Ein Ping-Befehl kommt nicht beim IIS an. Den beantwortet der Server.
Ein Webrequest im Sinne des HTTP-Protokolls kommt aber beim IIS an; wenn IIS im Schlaf-Modus ist, dann braucht das eben ein paar Sekunden länger - absolut normal und ein gewünschtes, standardmäßiges Verhalten.

Man kann diesen im Application Pool auch deaktivieren; mehr dazu findest Du in der IIS Hilfe.

Der Timeout ist aber nicht auf so etwas zurück zu führen; jeder Request wird trotzdem beantwortet.
Wenn dies nicht der Fall ist würde ich es definitiv auf einen Programmierfehler schieben, der hier den Request - eventuell weil er noch andere Daten braucht, die einfach aufgrund des Sleeps nicht zur Verfügung stehen - in eine "temporäre Endlosschleife" oder ähnliches laufen lässt.

Die Länge eines Postrequest ist nicht unbedingt interessant, aber die maximale Größe beim IIS ist standardmäßig 4 MB.

Wenn alle Stricke reissen: Server profilen!

mosspower Themenstarter:in
456 Beiträge seit 2007
vor 11 Jahren

Hm,

erst mal Danke für die Antwort.

Ping bedeutet nur, dass die Payload eben weniger Zeichen hat - ich schicke verschiedene Nachrichten programmiertechnisch immer gleich hin mit einer unterschiedlichen Länge der Payload und bei einem Ping-Befehl ist eben die Payload am geringsten und komischerweise funzzt das immer ... wenn es der Sleep-Mode sein sollte, dann würde das ja bedeuten, dass er a) nicht mehr aufwacht und b) nur noch Befehle mit einer Payload von einer gewissen Länge verarbeitet ... ich schau mal was ich unter Server Profiling finde, weil das Problem echt nervig ist ... ich denke aber, der Befehl kommt gar nicht erst bis zum Server durch und wird vorher (Internetprovider, Firewall ect.) einfach geblockt ... ich find ja auch nix im Server-Logfile.

Programmierfehler kann definitiv ausgeschlossen werden, weil gleicher Build auf aktuell 6 Servern läuft und das vollkommen ohne Probleme (bis eben auf die eine Ausnahme und das jetzt im 6. Tag hintereinander und hatte vorher nie Probleme damit)

16.806 Beiträge seit 2008
vor 11 Jahren

Eins Vorweg: gerade bei Webanwendungen, bei der quasi alles parallel läuft: niemals einen Programmierfehler kategorisch ausschließen. Ich wette mir Dir wenn man sucht, dann findet man irgendwas; auch wenn das jetzt nicht unbedingt die Lösung des Problems wird... aber gerade bei Webanwendungen und der Request-Behandlung wäre ich mit solchen Aussagen vorsichtig. Eine andere Servereinstellung, eine falsche Settings-Einstellung und schon reagiert evtl. der Pool anders und die Webanwendung fängt dies nicht ab.
Ebenso irgendwelche Threads im Hintergrund, die den Server blockieren, weil zum Beispiel fälschlicherweise der Thread-Pool verwendet wird, der für die Request-Behandlung zuständig ist.
Ist der voll wird nichts mehr beantwortet.

"Ich denke der Befehl kommt nicht durch" ist keine gute Hilfe für uns.
Entweder der Befehl kommt beim Server an, oder nicht. Kommt er nicht an, brauchst Du auf dem Server gar nicht erst nach dem Problem schauen -> Wireshark.

Dein Ping kam dann wohl falsch rüber. Es hatte sich so angehört als ob Du eine simple Ping-Anfrage stellst - und diese wird eben NICHT vom IIS beantwortet, sondern vom Betriebssystem. Da wacht dann auch nichts auf.
Wenn das ein Ping im Sinne eines stink-normalen Web-Request ist, dann musst Du das auch so formulieren.

Was das mit der Länge zutun hat weiß ich nicht.
Wenn die Anfrage beim Server ankommen sollte, dann sinds wohl die IIS Einstellungen (wobei mich dann Dein eingefrorener Server stutzig macht).
Sollte es nicht ankommen und ihr einen Load-Balancer habt würde ich mal da genauer schauen.

Jedenfalls: Anfragen werden nicht einfach so vom Internet-Provider blockiert.. und auch nicht von einem Router oder einem Switch.
Solang Du aber nicht geschaut hast, ob die Anfragen wirklich beim Server angekommen sind ist das alles Spekulation.

mosspower Themenstarter:in
456 Beiträge seit 2007
vor 11 Jahren

OK, sorry, da hab ich mich anfangs dann bißchen falsch ausgedrückt.
Es handelt sich hier nicht um eine "klassische" Webanwendung.

Der Client schickt "stink normale" HTTP-POST-Anfragen mittels WebRequest an den Server. Was halt wirklich komisch ist, ist die Tatsache, dass ein Befehl, welchen ich PING nenne (der ist nun mal kürzer, was die Zeichen betrifft, ansonsten gibt es imo keine Unterschiede, denn die Schnittstelle ist ja die gleiche) immer funktioniert und die anderen dann auf genau diesem Rechner nicht mehr, nachdem er halt eine Zeit lang "Idle" war.

Zu 100 Prozent kann man natürlich Prgrammierfehler nicht ausschließen aber hier wird eben "nur" ein Request an den Server geschickt, der eben, bei den aufgezählten Konstellationen, einfach net mehr durchkommt und im "laufenden Betrieb" funktioniert auch alles soweit - sehr komisch.

Ich schaue mal weiter gründlich nach ob ich was finde - dachte mir halt auch, dass ggf. jemand hier auch schon mal das Phänomen erlebt hat ... ggf. doch mal Wireshark draufspielen und überwachen ob das Ding überhaupt reinkommt - dir Danke erst mal. 👍

16.806 Beiträge seit 2008
vor 11 Jahren

Ich hab jetzt immer noch nicht verstanden, was es genau für eine Anwendung ist, wenn denn keine Webanwendung - aber im IIS läuft. Und was Du mit einem PING die ganze Zeit sagen willst, leuchtet mir auch nicht ein.
Der Server antwortet sicher nicht auf den Web-Request, sondern das tut die Anwendung - aber was ist es denn für eine Anwendung? ASP.NET? WCF? CGI? PHP? oder vielleicht doch eine Konsolenanwendung?

Und nochmal:
redest Du vom PING, und zwar von dem hier: Ping (Datenübertragung) so wird dieser NIEMALS vom IIS beantwortet.
Redest Du von einem simplen Request an die Webanwendung, den Du einfach Ping nennst, ist das was anderes.

mosspower Themenstarter:in
456 Beiträge seit 2007
vor 11 Jahren

OK,

  1. Mit dem Ping habe ich mich "entschuldigt" ... ist ein ganz normaler Request via HttpWebRequest-Objekt an den Server ... somit sollte das klar sein

  2. Wir wollen jetzt nicht darüber diskutieren, was es für eine "Art von Anwendung" und warum diese Art von Anwendung es ist. Nur soviel, IIS dient in dem ganzen Konstrukt nur dazu, Nachrichten aufzunehmen, bzw. auszutauschen und beim Request schreibt IIS-Anwendung (also ASPX-Seite) die Nachrichten "nur" auf die Platte und ein Sevice auf dem jeweiligen Rechner verarbeitet dann die Nachrichten, welche aber beim Fehler gar nicht geschickt werden können, da das HttpWebRequest-Objekt eben den Timeout-Error zurückbringt als Fehler.

  3. Es gibt kein Load-Balancing oder ähnliches, läuft alles (aktuell sogar "nur" sequentiell) über einen IIS-Server auf den jeweiligen Rechnern und ist mein privates Projekt.

16.806 Beiträge seit 2008
vor 11 Jahren

Na... wenn Du nicht sagen willst, was es für eine Anwendung ist, dann bringt das hier in meinen Augen absolut nichts.. zum Raten ist mir dann doch die Zeit zu schade.
Vielleicht hat ein anderer hier den besseren Durchblick und kann konkreter helfen. 🤔

mosspower Themenstarter:in
456 Beiträge seit 2007
vor 11 Jahren

Also, das Problem ist zwar nicht behoben aber ich habe kurzfristig eine andere Lösung programmiert. Anstatt die Daten via POST zu senden, wird jetzt nur noch eine Download-ID via POST gesendet und dann holt sich der Rechner die Daten via Download.

OK, zugegeben, wir gehen hier zweimal übers Netz für eine Nachricht, aber

a) es funzzt (das ist mal sehr wichtig)
b) Download ist schneller als Upload (somit ist die Gesamtverarbeitungszeit einer Nachricht in etwa gleich geblieben)

Ich hab ehrlich gesagt keine Ahnung woran das liegen könnt - ich tippe schwer auf den Anbieter (hier Tele2 Österreich). Es war wirklich so, dass POSTs nach einer bestimmten Zeit nicht mehr durchgelassen wurden (also, beim Server kam nix mehr an, nur noch Timeouts) ... egal, gelöst .. wir wissen ja alle, Sachen gibt es, die darf es eigentlich nicht geben. 😁

Danke für die Hilfe!