Avanti 2.1.1 logfile stottert

Martin Butkus m.butkus at tu-bs.de
Di Dez 2 11:22:03 CET 2003


Lieber Herr Berger, liebe Liste,

> (und ich habe den Eindruck, dass das exzessive Loggen Einfluss
> auf die Performance hat bzw. dass hier Dinge Zeichenweise

Das kann sein. Verbessert sich denn die Performance, wenn man 
das Logging abschaltet?

> transportiert werden, die besser bufferweise transportiert

Eigentlich nicht. Das Frontend buffert grundsätzlich alle Transfers, 
auch diejenigen für den stderr-Kanal des Kindprozesses.

Das Problem scheint vielmehr zu sein, daß die Stderr-Pipe von Seiten 
des Kindprozesses nur häppchenweise gefüllt wird, der Parent-Prozeß
erwartet aber (unberechtigterweise), mindestens eine ganze Zeile aus 
der Pipe lesen zu können.  Offenbar hatte ich Glück, mein Rechner 
ist scheinbar so schnell (oder langsam?) daß das immer geklappt hat.

Dieses Verhalten des Kindprozesses liegt darin begründet, daß für 
die Kommunikation via Pipes das normale stdio-Buffering abgeschaltet
wurde. Macht man das nicht, gibt es u.a. Probleme mit Clients, die 
nach "AVANTI:EOJ" kein Zeilenende "\n" senden, aber dennoch sofort
eine Antwort erwarteten. Es gab einige User auf der Liste, die 
dieses für ihre Skripte benötigen.

Für stdout und stderr kann man das Buffering natürlich dennoch 
einschalten, stdin muß dagegen weiter ungebuffert bleiben [Alternativ
könnte man das Protokoll ändern, dann müßten die betroffenen Benutzer
aber ihre Skripte anpassen. 

Außerdem werde ich die Logging-Routine ändern, so daß es auch dann 
zu keinem "Stottern" mehr kommt, wenn keine ganze Zeile auf einmal 
eingelesen werden kann.

Die neue Version folgt erst in den nächsten Tagen, weil ich z.Z.
an einem PHP-basierten Webfrontend für den Avanti stricke, das ich 
der neuen Version evtl. gleich mit beilegen würde.

Freundliche Grüße,
	Martin Butkus




Mehr Informationen über die Mailingliste Allegro