Problem mit Content-Length im Header und Keep-Alive
Verfasst: 11. Aug 2013, 23:44
Hallo!
Ich habe vor einiger Zeit schon festgestellt das auf meinem Server Redaxo unglaublich zäh läuft, da ich aber erst jetzt häufiger und intensiver mit Redaxo arbeite und die Entwicklungsgeschwindigkeit sehr wichtig ist habe ich das Problem genauer untersucht und wüsste nun gerne ob es sich tatsächlich um einen Fehler im Redaxo handeln kann.
Ich versuche einfach mal das hier so gut wie möglich aufzudröseln:
Symptom:
Sowohl im Front- als auch Backend brauchen Seiten ewig zu laden. Obwohl die PHP Skripte fehlerfrei laufen, und der Server keine nennenswerte Last hat.
Fehlersuche:
Betrachtet man die Ladezeiten der Seiten z.b. mit den Entwicklertools vom Chrome fällt auf, das die "Wartezeit" genau der Connection Keep-Alive Zeit entspricht die für den Webserver eingestellt ist. Der Webserver wartet also aus irgendeinem Grund mit dem fertigstellen der Seite bis der Timer abgelaufen ist. Meine erste Vermutung war das vieleicht ein schwerer Fehler im PHP einen der PHP Prozesse tötet und dadurch etwas hängen bleibt, dies konnte ich aber widerlegen, die Skripte laufen in jedem Fall durch. Allerdings habe ich herausgefunden das, wenn ein Skript einen Fehler enthält, dieses sofort lädt, ohne die Wartezeit.
Mögliche Diagnose:
Mit viel Hilfe von einem Bekannten habe ich das Problem weiter untersucht und wir glauben es jetzt soweit eingrenzen zu können das es eventuell am Redaxo selbst liegt. Und zwar ist im Header der Seiten jeweils "Content-Encoding: gzip" gesetzt sowie "Content-Length" mit einem bestimmten Wert. Dieser Wert ist allerdings nicht die Länge des gepackten Content sondern des unkomprimierten. Daher wartet der Browser auf weiteren Content obwohl der gepackte Inhalt schon längst komplett vorhanden ist und es kommt zum Timeout. Ein kurzes "grep -R Content-Length *" im Redaxo Ordner erweckt den Anschein als ob Redaxo die Content Länge selbst setzt (Daher auch das schnelle reagieren auf Skripte mit Fehlern, hier kommt Redaxo nicht dazu die Länge zu setzen und der Webserver übernimmt das).
Meine Frage ist nun: Klingt das soweit logisch? Ist das vieleicht ein bekanntes Problem und ich habe es nur nicht geschafft die Suche vernünftig zu benutzen? Kann man das schnell beheben?
Danke soweit!
Ich habe vor einiger Zeit schon festgestellt das auf meinem Server Redaxo unglaublich zäh läuft, da ich aber erst jetzt häufiger und intensiver mit Redaxo arbeite und die Entwicklungsgeschwindigkeit sehr wichtig ist habe ich das Problem genauer untersucht und wüsste nun gerne ob es sich tatsächlich um einen Fehler im Redaxo handeln kann.
Ich versuche einfach mal das hier so gut wie möglich aufzudröseln:
Symptom:
Sowohl im Front- als auch Backend brauchen Seiten ewig zu laden. Obwohl die PHP Skripte fehlerfrei laufen, und der Server keine nennenswerte Last hat.
Fehlersuche:
Betrachtet man die Ladezeiten der Seiten z.b. mit den Entwicklertools vom Chrome fällt auf, das die "Wartezeit" genau der Connection Keep-Alive Zeit entspricht die für den Webserver eingestellt ist. Der Webserver wartet also aus irgendeinem Grund mit dem fertigstellen der Seite bis der Timer abgelaufen ist. Meine erste Vermutung war das vieleicht ein schwerer Fehler im PHP einen der PHP Prozesse tötet und dadurch etwas hängen bleibt, dies konnte ich aber widerlegen, die Skripte laufen in jedem Fall durch. Allerdings habe ich herausgefunden das, wenn ein Skript einen Fehler enthält, dieses sofort lädt, ohne die Wartezeit.
Mögliche Diagnose:
Mit viel Hilfe von einem Bekannten habe ich das Problem weiter untersucht und wir glauben es jetzt soweit eingrenzen zu können das es eventuell am Redaxo selbst liegt. Und zwar ist im Header der Seiten jeweils "Content-Encoding: gzip" gesetzt sowie "Content-Length" mit einem bestimmten Wert. Dieser Wert ist allerdings nicht die Länge des gepackten Content sondern des unkomprimierten. Daher wartet der Browser auf weiteren Content obwohl der gepackte Inhalt schon längst komplett vorhanden ist und es kommt zum Timeout. Ein kurzes "grep -R Content-Length *" im Redaxo Ordner erweckt den Anschein als ob Redaxo die Content Länge selbst setzt (Daher auch das schnelle reagieren auf Skripte mit Fehlern, hier kommt Redaxo nicht dazu die Länge zu setzen und der Webserver übernimmt das).
Meine Frage ist nun: Klingt das soweit logisch? Ist das vieleicht ein bekanntes Problem und ich habe es nur nicht geschafft die Suche vernünftig zu benutzen? Kann man das schnell beheben?
Danke soweit!