[gelöst] Blog stürzt ab

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: [gelöst] Blog stürzt ab

Post by garvinhicking »

Hi!

Die obigen Probleme sind alle auf ein falsches Setup zurückzuführen, die so in der realen Welt bei keinem normalen, regulären Provider auftreten. Niemand richtet PHP so ein, dass es Prozesse blockieren kann. Das ist VÖLLIG UNABHÄNGIG von serendipity. JEDE PHP Applikation würde in einem solchen Setup früher oder später Probleme machen.

Eine "Ping-Schleife" gibt es nicht - beim Eintrag selbst pingen wird das nur beim speichern einmalig durchgeführt. Der Aufruf der eigenen URL führt nicht zu einer erneuten Ausführung eines Pings, da Pings aktiv nur vom admin ausgeführt werden, und nicht im Frontend, dass in diesem Fall der Aufruf ja wäre.
Ich betreue ua. eine Anwendung, die viele Zugriffe verdauen muß, und die für bestimmte Zwecke relativ regelmäßig in der Größenordnung von einer Stunde CPU-Zeit braucht, was von vorneherein bekannt war und ok ist. Also steht die entsprechende Anweisung auf gut einer Stunde... was eine Katastrophe wäre, wenn irgendein "normaler" Zugriff so eine Belastung auslösen könnte. Siehe auch den Abschnitt über die Auswirkungen von "irgendwo" abgebrochenen Prozessen weiter unten.
Dafür sollte definitiv ein eigener, gekappselter VHost eingerichtet werden.
aber falsch ist nach meinem Eindruck, daß er in der Anwendung nicht darauf reagieren kann.
Da lasse ich mich gerne eines besseren Belehren, was schlägst Du vor wie mit PHP Netzwerkproblemem umgegangen werden soll? Wenn die PHP Timeouts nicht korrekt konfiguriert sind und endlos laufen dürfen, hat keine PHP-Anwendung hier die Möglichkeit einzugreifen. Die PHP Timeouts liegen eine Schicht "höher", d.h. bei grundlegenden Firewall-Problemen kommt PHP garnicht dazu seine Timeouts festuzlegen. Das hängt alles vom Setup ab, und cummins' provder hat da einfach Mist gebaut, denn 100% CPU Last DARF NICHT SEIN bei einem einzelnen PHP-Prozess der nichts anderes tut als auf einen timeout zu warten. ;-)
Außerdem kann man, wenn man wirklich viele Rechte auf dem System hat, vor bestimmten Operationen die Maximallaufzeit des Prozesses selbst heruntersetzen ( set_time_limit() ). Von daher meine ich nicht, daß man als Systemadministrator Begrenzungen für Serendipity setzen müssen sollte.
Derartige timelimits sind Teil eines sinnvollen Serversetups, eine PHP-Anwendung sollte dies meiner Meinung nach nicht überschreiben. Klassisches Beispiel von "doof gedacht": Das CMS Redaxxo setzt beim DAtenbankdump ein Timelimit von 600 sekunden. Wir haben aber ein so großes System, dass der Dump rund 900 Sekunden dauert. Also müssen wir tatsächlich den Code von redaxo patchen um die Skriptlaufzeit zu beeinflussen, obwohl es sonst definitiv eine Aufgabe der .htaceess und php.ini wäre.

Sorry dass ich hier etwas aufgebracht bin, abe3r ich finde die Diskussion etwas müßig weil ein derartiges Setup in der realen PHP-Welt totaler Schwachfug ist.

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
tonimueller
Posts: 4
Joined: Mon Jun 29, 2009 11:55 am

Re: [gelöst] Blog stürzt ab

Post by tonimueller »

Hi!
garvinhicking wrote: Eine "Ping-Schleife" gibt es nicht - beim Eintrag selbst pingen wird das nur
Ok - an diese These hatte ich ja entsprechende "Fragezeichen" drangemacht.
garvinhicking wrote:
Ich betreue ua. eine Anwendung, die viele Zugriffe verdauen muß, und die für bestimmte Zwecke relativ regelmäßig in der Größenordnung von einer Stunde CPU-Zeit braucht, was von vorneherein bekannt war und ok ist. Also steht die entsprechende Anweisung auf gut einer Stunde... was eine Katastrophe wäre, wenn irgendein "normaler" Zugriff so eine Belastung auslösen könnte. Siehe auch den Abschnitt über die Auswirkungen von "irgendwo" abgebrochenen Prozessen weiter unten.
Dafür sollte definitiv ein eigener, gekappselter VHost eingerichtet werden.
Ist es...
garvinhicking wrote:
aber falsch ist nach meinem Eindruck, daß er in der Anwendung nicht darauf reagieren kann.
Da lasse ich mich gerne eines besseren Belehren, was schlägst Du vor wie mit PHP Netzwerkproblemem umgegangen werden soll? Wenn die PHP Timeouts nicht korrekt konfiguriert sind und endlos laufen dürfen,
Tja... ich kenne keine Netzwerk-Timeouts in der php.ini (dazu gibt die Suche auf php.net auch nichts aus), nur ein Timeout für die Laufzeit des Gesamtprozesses, aber ich kenne Timeouts als Parameter für Netzwerkfunktionen in PHP selbst, so daß man als Anwendungsentwickler in der Lage sein sollte, diese zu setzen. Wenn das in PHP nicht funktionieren sollte, obwohl die Beschreibung bei diesen Funktionen: stream_select(), stream_set_timeout(), fsockopen() etc.pp. so beschrieben ist, und wenn die Signale, mit denen man solche Operationen abbrechen können müßte, auch nicht funktionieren, dann weiß ich nicht wirklich, wie man das Problem lösen kann. Die Beschreibung der Funktionen auf php.net liest sich so, als würden da nur libc-Aufrufe an PHP durchgereicht, und dann müßte es funktionieren. Allerdings bin ich selber schon mehr als einmal auf Fehler in PHP selbst gestoßen, die teilweise nur auf manchen Plattformen auftraten, von daher ist das nur meine Vermutung, der Du Deine Erfahrung entgegensetzen kannst.
garvinhicking wrote: Die PHP Timeouts liegen eine Schicht "höher", d.h. bei grundlegenden Firewall-Problemen kommt PHP garnicht dazu seine Timeouts festuzlegen.
Diesen Abschnitt verstehe ich nicht. Meinst Du, daß etwaige (lange) DNS-Timeouts nicht von den Timeouts beeinflußt werden können, die Du in den og. Funktionen angibst? Oder sind die Timeouts schlimmstenfalls durch aktives Warten implementiert (was die 100% CPU-Last erklären könnte)?
garvinhicking wrote: Das hängt alles vom Setup ab, und cummins' provder hat da einfach Mist gebaut, denn 100% CPU Last DARF NICHT SEIN bei einem einzelnen PHP-Prozess der nichts anderes tut als auf einen timeout zu warten. ;-)
In diesem Punkt sind wir einer Meinung: Ein PHP-Prozeß, der auf ein Timeout wartet, darf keine CPU-Zeit verbraten, zumindest dann nicht, wenn die fraglichen Funktionen mit passivem Warten implementiert sind.

Wir diskutieren an dieser Stelle nur über die Frage, wie das Setup dazu führen soll, daß ein wartender Prozeß doch (viel) CPU-Zeit frißt. Das verstehe ich nicht. Hast Du dazu vielleicht eine Theorie?

Meine Theorie ist, daß ein Prozeß, der CPU-Zeit frißt, irgendetwas tut, also nicht einfach nur (passiv) wartet. Wenn man das nicht durch Anschauen des Anwendungscodes (= s9y) sieht - Deine These ist, daß der Code in dieser Hinsicht fehlerfrei ist, und daß deshalb da nichts sein kann - hätte man den PHP-Prozeß eigentlich mit einem Debugger tracen müssen, aber das ist natürlich ziemlicher Aufwand. Wenn ich die Site von dem Menschen mit dem Problem hätte, würde ich gerne mal versuchen, das Problem lokal nachzuvollziehen. Ob sich dann herausstellt, daß es ein Anwendungsfehler oder ein PHP-Problem ist, kann man jetzt ja (meiner Meinung nach) gar nicht sagen, und dementsprechend wären ja auch die Lösungsansätze verschieden.
garvinhicking wrote:
Außerdem kann man, wenn man wirklich viele Rechte auf dem System hat, vor bestimmten Operationen die Maximallaufzeit des Prozesses selbst heruntersetzen ( set_time_limit() ). Von daher meine ich nicht, daß man als Systemadministrator Begrenzungen für Serendipity setzen müssen sollte.
Derartige timelimits sind Teil eines sinnvollen Serversetups, eine PHP-Anwendung sollte dies meiner Meinung nach nicht überschreiben.
Wenn man weiß, daß in einem bestimmten Codepfad keine aufwendige Aktion passieren kann, man aber an anderen Stellen viel mehr CPU-Zeit braucht, könnte man in den "billigen" Code-Pfaden die Begrenzung heruntersetzen. So war das von mir aus jedenfalls gemeint.
garvinhicking wrote: Klassisches Beispiel von "doof gedacht": Das CMS Redaxxo setzt beim DAtenbankdump ein Timelimit von 600 sekunden. Wir haben aber ein so großes System, dass der Dump rund 900 Sekunden dauert. Also müssen wir tatsächlich den Code von redaxo patchen um die Skriptlaufzeit zu beeinflussen, obwohl es sonst definitiv eine Aufgabe der .htaceess und php.ini wäre.
Was ich meinte, ist, daß man z.B. in der S9Y-Konfiguration einstellen könnte, wieviel Zeit man denn dem Prozeß oder z.B. den Netzwerkfunktionen geben möchte. Sozusagen als zusätzlicher Sicherheitsgurt, falls das Gastssystem unpassend konfiguriert ist. Ich habe keine Ahnung davon, was für S9Y angemessen wäre - reichen die 30 Sekunden CPU-Limit, die in einer "Standard-php.ini" eingestellt sind?
garvinhicking wrote: Sorry dass ich hier etwas aufgebracht bin, abe3r ich finde die Diskussion etwas müßig weil ein derartiges Setup in der realen PHP-Welt totaler Schwachfug ist.

Viele Grüße,
Garvin
Hier habe ich den Eindruck, daß wir aneinander vorbeireden.

Du hast eben von Deiner Redaxo-Geschichte mit einem Timeout von einer Viertelstunde geredet. Ich bin mir sicher, daß dem Menschen, der das Problem geschildert hat, bzw. seinem Hoster, kaum damit geholfen gewesen wäre, das Timeout auf eine Viertelstunde einzustellen, obwohl das ein Wert aus der (Deiner) "realen PHP-Welt" ist. Und wie gesagt, er hat ja auch noch andere Anwendungen, die viel mehr CPU-Zeit als die 30 Sekunden zu brauchen scheinen, und deren Lauffähigkeit dagegen sprach, das Timeout generell stark herunterzusetzen. Davon abgesehen wäre S9Y bei dieser problematischen Seite ja bei 30 Sekunden abgestürzt bzw. abgebrochen worden, nur hätte es nicht mehr den ganzen Server in die Tiefe gezogen. Mit anderen Worten: Eine kleine Zeitbegrenzung einzustellen, ist keine Lösung, sondern nur ein Würgaround.

Mir fehlt schlicht ein Ansatz, wie ich speziell dieses Problem im Voraus ausschließen kann, ohne auf S9Y verzichen zu müssen. Auf die ganzen anderen Probleme, was beim Abbruch der Anwendung passiert, bist Du ja leider gar nicht eingegangen, aber der Normalfall (nicht nur) bei PHP-Anwendungen ist definitiv nicht, daß die Anwendungen vom System aus abgebrochen werden, sondern, daß dieses Timeout (max_execution_time etc.) nur als letzter Sicherheitsgurt des Systems gegen Programmierfehler oder Fehler in PHP gedacht sind, notfalls eben zu Lasten der abgebrochenen Anwendung. Und das ist völlig unabhängig davon, auf welchen Wert dieses Timeout letzten Endes eingestellt ist, solange es genügend hoch ist und die Anwendung im Normalfall (= solange kein Fehler auftritt) "ordentlich" terminiert. Das Timeout hilft nur gegen eine unabsichtliche Serverüberlastung, aber z.B. nicht dagegen, daß die Seite falsch oder nicht angezeigt wird (was beim Abbruch des Prozesses zu erwarten ist), oder dagegen, daß eine Datenbanktransaktion, die aus mehreren Abfragen besteht, nicht abgeschlossen werden kann.

Das Problem muß meiner Ansicht nach noch irgendwo anders als in einer zu hohen Zeitbegrenzung in der php.ini liegen, und ich sähe dieses Problem - durchaus unter Einsatz eigener Arbeitszeit - gerne gelöst, bevor ich mich entschließe, S9Y-Hosting anzubieten.

Wenn ich mir vorstelle, daß ein Benutzer durch eine einfache Aktion versehentlich einen Server plätten kann (= Ist-Zustand), ohne daß ich von diesem Benutzer den Preis für einen Server bekomme, dann habe ich da ein Problem, und ich habe ebenfalls ein Problem, wenn der Benutzer dauernd auf der Matte steht, weil seine Anwendung nicht richtig läuft, sondern stattdessen dauernd vom System abgebrochen wird.

Viele Grüße,
Toni
blog.brockha.us
Regular
Posts: 695
Joined: Tue Jul 03, 2007 3:34 am
Location: Berlin, Germany
Contact:

Re: [gelöst] Blog stürzt ab

Post by blog.brockha.us »

Mal nebenbei: Das ursprüngliche Problem war der Versuch, folgende URL anzupingen:

Code: Select all

/index.php?/archives/3-Der-faire-Blick-von-Oben.html
Wenn ich mir den Code in S9Y da so ansehe, dann produziert dieser daraus ein ping auf folgende URL:

Code: Select all

://:80/index.php?/archives/3-Der-faire-Blick-von-Oben.html
Das ist natürlich kompletter Quatsch und ich weiß nicht, was PHP da macht, wenn man eine solche kaputte URL aufrufen möchte..

Ich muss mal schauen, ob im Code vorher so eine relative URL bereits abgefangen wird. Wenn nicht, muss das in functions_trackbacks.inc.php korrigiert werden (mache ich dann..)
- Grischa Brockhaus - http://blog.brockha.us
- Want to make me happy? http://wishes.brockha.us/
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: [gelöst] Blog stürzt ab

Post by garvinhicking »

Hi!
Tja... ich kenne keine Netzwerk-Timeouts in der php.ini (dazu gibt die Suche auf php.net auch nichts aus), nur ein Timeout für die Laufzeit des Gesamtprozesses, aber ich kenne Timeouts als Parameter für Netzwerkfunktionen in PHP selbst, so daß man als Anwendungsentwickler in der Lage sein sollte, diese zu setzen.
Das Problem ist, dass derartige Timeouts nur greifen wenn das TCP/IP-Routing klappt. Wenn es auf dieser Ebene Probleme gibt, helfen die Timeouts nichts. Und meine Erfahrung ist, dass Trackbacks eher auf höhere Ebene Probleme machen, und nicht auf der, wo man die Timeouts spezifiziert. Also auch bei Probleme in der DNS-Auflösung, Filterung der Firewall, Probleme im NAT o.ä.
Wir diskutieren an dieser Stelle nur über die Frage, wie das Setup dazu führen soll, daß ein wartender Prozeß doch (viel) CPU-Zeit frißt. Das verstehe ich nicht. Hast Du dazu vielleicht eine Theorie?
Die habe ich nicht, aber ich sehe das jetzt auch eher als Aufgabe des Providers, dies zu analysieren - aber dazu war er ja scheinbar nicht bereit.

Was ich meinte, ist, daß man z.B. in der S9Y-Konfiguration einstellen könnte, wieviel Zeit man denn dem Prozeß oder z.B. den Netzwerkfunktionen geben möchte. Sozusagen als zusätzlicher Sicherheitsgurt, falls das Gastssystem unpassend konfiguriert ist. Ich habe keine Ahnung davon, was für S9Y angemessen wäre - reichen die 30 Sekunden CPU-Limit, die in einer "Standard-php.ini" eingestellt sind?
Das kann man so pauschal garnicht sagen, denn es hängt u.a. von Menge und Art der Plugins ab, die man einsetzt, wie schnell der Server ist, wie schnell das Netzwerk-Routing/Bandbreite, Serverlast, Art des Filesystems etc. Ich denke nicht dass man den Usern einen Gefallen mit einer derartigen Option bieten könnte, sondern eher für noch mehr Verwirrung und Möglichkeiten zur Fehlkonfiguration bieten würde...
Du hast eben von Deiner Redaxo-Geschichte mit einem Timeout von einer Viertelstunde geredet. Ich bin mir sicher, daß dem Menschen, der das Problem geschildert hat, bzw. seinem Hoster, kaum damit geholfen gewesen wäre, das Timeout auf eine Viertelstunde einzustellen, obwohl das ein Wert aus der (Deiner) "realen PHP-Welt" ist. Und wie gesagt, er hat ja auch noch andere Anwendungen, die viel mehr CPU-Zeit als die 30 Sekunden zu brauchen scheinen, und deren Lauffähigkeit dagegen sprach, das Timeout generell stark herunterzusetzen. Davon abgesehen wäre S9Y bei dieser problematischen Seite ja bei 30 Sekunden abgestürzt bzw. abgebrochen worden, nur hätte es nicht mehr den ganzen Server in die Tiefe gezogen. Mit anderen Worten: Eine kleine Zeitbegrenzung einzustellen, ist keine Lösung, sondern nur ein Würgaround.
Ich glaube nicht dass auf dem System der Time-Limit Timeout ein Problem war, sondern es mit den Socket-Verbindungen bzw. Firewalling o.ä. und deren Blockierung zusammenhing. Da hilft auch kein timelimit im Userspace-Code, denn auch dann wäre der Prozess sicher weitergelaufen.

Es ist müßig hier mit hätte, wäre, könnte zu argumentieren, wenn wir den eigentlichen Server nicht debuggen können. Ich bin nach wie vor 100% der Meinung das es ein Fehlsetup dort ist das völlig unabhängig von s9y ist, und jede andere PHP-Anwendung mit Netzwerkfunktionen bei ihm auch probleme gemacht hätte.
Auf die ganzen anderen Probleme, was beim Abbruch der Anwendung passiert, bist Du ja leider gar nicht eingegangen, aber der Normalfall (nicht nur) bei PHP-Anwendungen ist definitiv nicht, daß die Anwendungen vom System aus abgebrochen werden, sondern, daß dieses Timeout (max_execution_time etc.) nur als letzter Sicherheitsgurt des Systems gegen Programmierfehler oder Fehler in PHP gedacht sind, notfalls eben zu Lasten der abgebrochenen Anwendung.
Korrekt, wenn überhaupt ien Scriptabbruch vorkommt oder vorkommen muss, liegt eine Situation vor die man beheben muss um die Anwendung weiterhin zu nutzen. Also entweder Trackbacks zu einem "defekten Server" rauslassen, keine XML-RPC Pings schicken, Netzwerkrouting fixen o.ä.
Das Problem muß meiner Ansicht nach noch irgendwo anders als in einer zu hohen Zeitbegrenzung in der php.ini liegen, und ich sähe dieses Problem - durchaus unter Einsatz eigener Arbeitszeit - gerne gelöst, bevor ich mich entschließe, S9Y-Hosting anzubieten.
Falls es dich beruhigt, das Problem kann bei jeder PHP-Anwendung, auch WordPress, Gallery oder sonstwas auftreten, das regelmäßigen gebrauch von socketfunktionen macht. In Hostingumgebungen sollte PHP als CGI eingebaut werden, darin kann man auch harte timeouts spezifizieren und ressourcelimits. Wie das Setup genau geht führt etwas über den Rahmen dieses Forums hinaus und ist eher für rootserver.de o.ä. geeignet, da gibt es mehr Fachkenntnis mit dem generellen PHP-Setup und der Vermeidung solcher anwendungsübergreifender Probleme.

Viele Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: [gelöst] Blog stürzt ab

Post by garvinhicking »

Hi!

Code: Select all

://:80/index.php?/archives/3-Der-faire-Blick-von-Oben.html
Das ist natürlich kompletter Quatsch und ich weiß nicht, was PHP da macht, wenn man eine solche kaputte URL aufrufen möchte..
Das wäre wirklich quatsch und doof, aber zumindest bei mir ist das nicht der Fall, und die eigene relative URL wird von s9y davor gehangen.

ABER selbst wenn es so wäre, sollte ein vernünftig aufgesetztes PHP durch timeouts und scriptabbruchzeiten so eingerichtet sein, dass der Server nicht in die Knie gezwungen wird. Stell Dir vor, 1&1 hätte so eine einrichtung nicht, dann würde es ausreichen wenn ein programmierer auf einem Massenserver ein PHP-Script schreibt mit obigen connectiondaten, und damit könnte er dann den ganzen Server runterziehen. Das ist ja ein Problem, was immer mal auftreten kann, entweder durch falsche usereingaben oder falsche programmierung, und das muss der Sysop durch ein korrektes PHP-Setup abfangen.

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
blog.brockha.us
Regular
Posts: 695
Joined: Tue Jul 03, 2007 3:34 am
Location: Berlin, Germany
Contact:

Re: [gelöst] Blog stürzt ab

Post by blog.brockha.us »

garvinhicking wrote:Das wäre wirklich quatsch und doof, aber zumindest bei mir ist das nicht der Fall, und die eigene relative URL wird von s9y davor gehangen.
Jep, das vermutete ich bereits. Ich habe nur die direkte Funktion zum verschicken angesehen. Ich vermute, es werden vorher bereits relative URLs zu absoluten umgewandelt, habe das bisher aber noch nicht verifizieren können. Gut, dass es offenbar so ist. :)
- Grischa Brockhaus - http://blog.brockha.us
- Want to make me happy? http://wishes.brockha.us/
Post Reply