endlosschleifen und Datenausgabe ...
Philipp Hasenfratz
- https
Hallo zusammen
hab soeben eine Endlosschleife ( aber eine kontrollierbare, die ich jederzeit abschalten kann ) in Gang gesetzt, welche sinnlos (oder halb sinnlos) Daten an den Client versendet. Nun habe ich mein Browserfenster geschlossen und das Script läuft auf dem Server schön weiter und frisst seine Performance...
Nun, meine Frage: Was passiert eigentlich mit den Daten? - Das Socket wurde ja getrennt, wird dann die Ausgabe nicht mehr weitergeführt, STDOUT also auf NULL umgeleitet, oder schreibt mein Programm jetzt gerade den "Output-Cache" des Servers voll???
Mein Programm soll ihn eigentlich nicht zum Absturz bringen, deshalb wohin mit den ausgegebenen Daten? - Von Performanceverlust will ich hier nix hören! - Ich weiss schon, was das für Konsequenzen hat (glaube ich ;) ).
Gruss
Philipp
Hallo zusammen
Hallo ebenfalls ;-)
hab soeben eine Endlosschleife ( aber eine kontrollierbare, die ich jederzeit abschalten kann ) in Gang gesetzt, welche sinnlos (oder halb sinnlos) Daten an den Client versendet. Nun habe ich mein Browserfenster geschlossen und das Script läuft auf dem Server schön weiter und frisst seine Performance...
ähm, naja, "Endlosschleifen" kann man mit so ziemlich allen Programmiersprachen erstellen, und ein Abbruch bzw. eine Datenumleitung (auch nach NULL) kann unterschiedlich bewerkstelligt werden. Du müßtest schon bissel genauere Angaben über deine Schleife machen.
Christoph S.
hab soeben eine Endlosschleife ( aber eine kontrollierbare, die ich jederzeit abschalten kann ) in Gang gesetzt, welche sinnlos (oder halb sinnlos) Daten an den Client versendet. Nun habe ich mein Browserfenster geschlossen und das Script läuft auf dem Server schön weiter und frisst seine Performance...
ähm, naja, "Endlosschleifen" kann man mit so ziemlich allen Programmiersprachen erstellen, und ein Abbruch bzw. eine Datenumleitung (auch nach NULL) kann unterschiedlich bewerkstelligt werden. Du müßtest schon bissel genauere Angaben über deine Schleife machen.
Hallo Christoph,
es geht nicht darum, das __ich__ das mache, sondern ich stelle mir die Frage, was der Webserver macht, wenn er keinen Client mehr hat, an den er die Daten sendet. Meine Schleife ist ziemlich egal; was macht der Webserver???
Gruss
Philipp
hi,
es geht nicht darum, das __ich__ das mache, sondern ich stelle mir die Frage, was der Webserver macht, wenn er keinen Client mehr hat, an den er die Daten sendet. Meine Schleife ist ziemlich egal; was macht der Webserver???
ich glaub, das ist ein Mißverständnis. Der Webserver macht schließlich auch nur das, was du ihm sagst. Inso fern ist die Schleife gar nicht so egal, irgendwer muß ihm ja mal gesagt haben, daß er so eine Schleife abarbeiten soll.
Christoph S.
Hi
es geht nicht darum, das __ich__ das mache, sondern ich stelle mir die Frage, was der Webserver macht, wenn er keinen Client mehr hat, an den er die Daten sendet. Meine Schleife ist ziemlich egal; was macht der Webserver???
ich glaub, das ist ein Mißverständnis. Der Webserver macht schließlich auch nur das, was du ihm sagst. Inso fern ist die Schleife gar nicht so egal, irgendwer muß ihm ja mal gesagt haben, daß er so eine Schleife abarbeiten soll.
ja, da hast du schon recht.
Nun, eine Schleife sendet dauernd Daten an STDOUT, der Webserver cached die Daten für das Zurücksenden zum Client, welcher aber bereits nicht mehr "auf Empfang" steht. Nun stellt sich mir die Frage, wo diese Daten hingehen; werden diese vom Webserver noch versendet, oder überläuft bei dem der Cache. Und was passiert im Web, wenn diese Daten den Empfänger nicht mehr erreichen?
Gruss
Philipp
hm, versuchen wirs noch mal:
Nun, eine Schleife sendet dauernd Daten an STDOUT, der Webserver cached die Daten für das Zurücksenden zum Client, welcher aber bereits nicht mehr "auf Empfang" steht.
ok, ich denke, die Situationsbeschreibung hab ich verstanden. Aber das "wie" wird von den Severn sehr unterschiedlich gehandhabt, falls du den IIS einsetzen solltest, kennt der zum Beispiel stderr überhaupt nicht, und der Apache verhält sich per default anders als XITAMI. Außerdem kann man diese Ausgabeströme als Administrator eben festlegen. Solange ich nicht weiß, welchen Server du hast, muß ich Rätsel raten.
Für jeden Server-Cache gibt es einen Standardwert, der ein "Vollaufen" verhindert, meist entweder ein Zeitwert oder aber eine begrenzte Menge Speicher. Ist dieser Wert erreicht, wird der Cache geleert, um ein Überlaufen zu verhindern
Nun stellt sich mir die Frage, wo diese Daten hingehen; werden diese vom Webserver noch versendet, oder überläuft bei dem der Cache.
beides ist möglich; ein "Überlaufen" bedeutet aber, daß der Server seinen Cache dann auf 0 zurücksetzt.
Und was passiert im Web, wenn diese Daten den Empfänger nicht mehr erreichen?
Auch das ist davon abhängig, wie der Server konfiguriert ist. "Konfiguriert" bedeutet´in diesem Fall, wie er die IP-Pakete signiert. TCP/IP-Pakete können im Netz sowieso auch verlorengehen. Wenn die Serversignatur sagt, daß der Server sie zurücknimmt bei nicht mehr vorhandenem Client, fischt er sie wieder aus dem Netz und legt sie entweder im Cache ab oder löscht sie. Ist keine solche Signatur da, schwirren sie ein Weilchen durch die EDV-Welten und sterben dann einfach ab oder werden von irgendeiner Putzkolonne in Hinterposemuckeltown rausgezogen und beerdigt.
Gruß
Christoph S.
hm, versuchen wirs noch mal:
sorry, wenn ich was nicht so ganz mitbekommen hab ;)
Nun, eine Schleife sendet dauernd Daten an STDOUT, der Webserver cached die Daten für das Zurücksenden zum Client, welcher aber bereits nicht mehr "auf Empfang" steht.
ok, ich denke, die Situationsbeschreibung hab ich verstanden. Aber das "wie" wird von den Severn sehr unterschiedlich gehandhabt, falls du den IIS einsetzen solltest, kennt der zum Beispiel stderr überhaupt nicht, und der Apache verhält sich per default anders als XITAMI. Außerdem kann man diese Ausgabeströme als Administrator eben festlegen. Solange ich nicht weiß, welchen Server du hast, muß ich Rätsel raten.
Meine Güte, ich hab nicht mal den Server genannt, ist wirklich ein Verbrechen: apache auf linux. Sorry mein Fehler, hätte daran denken sollen.
Für jeden Server-Cache gibt es einen Standardwert, der ein "Vollaufen" verhindert, meist entweder ein Zeitwert oder aber eine begrenzte Menge Speicher. Ist dieser Wert erreicht, wird der Cache geleert, um ein Überlaufen zu verhindern
Sehr gut. Das war's wohl, wonach ich gefragt habe. Danke.
Und was passiert im Web, wenn diese Daten den Empfänger nicht mehr erreichen?
Auch das ist davon abhängig, wie der Server konfiguriert ist. "Konfiguriert" bedeutet´in diesem Fall, wie er die IP-Pakete signiert. TCP/IP-Pakete können im Netz sowieso auch verlorengehen.
das ist klar. Ich habe nur gedacht, wenn der Server die Packete versendet und diese von niemandem empfangen werden wollen, wo bleiben die dann? - Nun, an eine Inet-Putze habe ich natürlich kaum gedacht ;)
Wenn die Serversignatur sagt, daß der Server sie zurücknimmt bei nicht mehr vorhandenem Client, fischt er sie wieder aus dem Netz und legt sie entweder im Cache ab oder löscht sie. Ist keine solche Signatur da, schwirren sie ein Weilchen durch die EDV-Welten und sterben dann einfach ab oder werden von irgendeiner Putzkolonne in Hinterposemuckeltown rausgezogen und beerdigt.
Es lebe die Inet-Putze ;)
Vielen Dank und viele Grüsse, du hast mich wieder etwas schlauer gemacht (das meine ich ernst!->Danke.)
Philipp
Tach,
Meine Güte, ich hab nicht mal den Server genannt, ist wirklich ein Verbrechen: apache auf linux. Sorry mein Fehler, hätte daran denken sollen.
Dieser Server schliesst bei Verbindungsabbruch STDOUT und schickt ein SIGTERM an das Script.
Wenn das Script SIGTERM ignoriert und weiter versucht, an STDOUT zu schreiben, werden im Falle von Perl Fehlermeldungen im Errorlog produziert.
Irgendwann bekommt es dann ein SIGKILL.
Jens
Meine Güte, ich hab nicht mal den Server genannt, ist wirklich ein Verbrechen: apache auf linux. Sorry mein Fehler, hätte daran denken sollen.
Dieser Server schliesst bei Verbindungsabbruch STDOUT und schickt ein SIGTERM an das Script.
Wenn das Script SIGTERM ignoriert und weiter versucht, an STDOUT zu schreiben, werden im Falle von Perl Fehlermeldungen im Errorlog produziert.
Irgendwann bekommt es dann ein SIGKILL.
Hm. Komisch, ich hab wohl apache und linux, meine Programme werden aber erst nach 3 Stunden gekillt (wahrscheinlich durch den Supervisor, der hat was gegen mich ;) ), obwohl ich keine 3 Stunden die Verbindung aufrechterhalte. Nun gut, Hauptsache die STDOUT wird geschlossen und ich überflüte das Internet nicht ;)
Gruss
Philipp
PS: Danke und 'tschuldigung für die verspätete Nachricht.