Mailinglisten-Archive |
Hallo allerseits! Entschuldigt bitte den etwas "faserigen" Betreff, aber ich fühle mich etwas orientierungslos und könnte ein bisschen Hilfe gebrauchen. Ich versuche es so kurz wie möglich zu halten: Wenn sich viele Benutzer gleichzeitig auf meiner Seite tummeln, gehen manche Funktionen in die Knie, z. B. die Suchfunktion. Das liegt meiner Vermutung nach jedoch nicht an der Suche selbst, sondern daran, dass der Server eine Vielzahl von "schlafenden" Prozessen ansammelt, und diese "Karteileichen" den "echten" Prozessen Rechenzeit oder Zugriffs- rechte abtrünnig machen. (Auch wenn es nicht direkt etwas mit PHP zu tun hat: Wie kommt es eigentlich zu diesen "schlafenden" Prozessen? Was machen die? Wachen die irgendwann mal wieder auf oder werden sie doch noch beendet?) Ein Problem könnte darin liegen, dass die Suche manche Bereiche der Seite "indiziert", d. h. eine Art Zusammenfassung erstellt und diese speichert. (Wenn sich bis zur nächsten Suche nichts ändert, kann die Zusammenfassung wiederverwendet werden und spart dann Zeit.) Bei den Dateioperationen benutze ich die flock()-Funktion in ihrer Reinform, auch wenn mir bewusst ist, dass ein fopen(..., 'w') nicht wirklich dazu passt. Um das Thema "Abbruch durch den Benutzer" habe ich mich bisher noch nicht gekümmert. Kann es also sein, dass ein Abbruch nach flock() die folgenden Prozesse ausbremst, die sich mit flock() auf die gleiche Datei beziehen? Kann ich das mit ignore_user_abort() in geordnete Bahnen lenken? Dann zu flock(): http://www.php.net/manual/de/function.flock.php bietet in den Benutzerkommentaren viele Anregungen, wie man aus dem etwas ungeschickten Ansatz, den Zugriff erst nach Öffnen zu sperren, etwas Brauchbares macht. Ist $fp = fopen(..., 'a'); // <- Dateiinhalt erst bewahren flock($fp, LOCK_EX); ftruncate($fp, 0); // <- jetzt erst löschen fputs($fp, ...); flock($fp, LOCK_UN); fclose($fp); der "richtige" Ansatz als Ersatz für fopen(..., 'w') + flock()? Sehe ich das richtig, dass auch fopen(..., 'r') mit flock() kombiniert werden muss, damit das Konzept stimmig ist? Und was ist mit Funktionen wie file_get_contents() / file_put_contents()? Für Hilfestellung jeder Art bin ich dankbar; auch Hinweise / Vermutun- gen, dass das Problem vielleicht ganz woanders liegt. Ach ja: Wenn der Server ganz zu hängen scheint, hilft es manchmal, das Session-Cookie im Browser zu löschen und die Seite neu zu laden, dann geht's. (Weiß zwar nicht, ob das irgendetwas mit dem Problem zu tun hat, aber ich erwähne es lieber mal.) Vielen Dank im Voraus, Mario Haßler
php::bar PHP Wiki - Listenarchive