atomarer Zugriff auf Datein
XaraX
- php
Hallo,
############## Tester gesucht ##############
den unter http://eddi.to-grip.de/PHP/semaphor/ abgelegten Code bitte ich zu testen. Derzeit ist nur die Version 0.1.0 relevant. Das Script soll den Zweck verfolgen, atomare Zugriffe auf eine Datei ohne flock() zu realisieren. Das Script ist halbwegs verständlich kommentiert, jedoch wird für die Ausführung mindestens die Version 5.0.0 (file_put_contents()) benötigt und die Erweiterung sysvsem muß PHP zur Verfügung stehen.
Zum Testen habe ich das apache-eigene Tool ab mit folgenden Parametern genutzt:
$ ./ab -n 1000 -c 10 http://localhost/0.1.0.php
$ ./ab -n 1000 -c 100 http://localhost/0.1.0.php
Gerade bei letzerem Test wird es auf langsamen Maschinen zu Abweichungen dahingehend kommen, daß nicht alle Request abgearbeitet werden können. Stimmt die in der Speicherdatei erfaßte Anzahl von Zugriffen nicht mit der Anzahl an Zugriffen in der access_log überein, so arbeitet das Script nicht wie vorhergesehen (dann habe ich also Mist zusammengescriptet ;)
Ich bitte aber in jedem Fall, um eine kurze Rückmeldung unter Angabe der Serversoftware + Version (+ MPM wenn apache) und der PHP Version + SAPI. Danke :)
############## !!!ACHTUNG!!! ##############
Dieses Script legt Semaphoren an, dabei kann es zu verweisten Semaphoren kommen. Auf einem Linuxsystem stehen zum manuellen Aufspüren und Entfernen solcher die Tools ipcs und ipcrm zur Verfügung (/usr/bin). Eine gute Beschreibung habe ich unter http://www.peter-kohlert.de/t/prg/semaphoren.html gefunden.
Vor dem Test bitte abprüfen, ob die im Script mit $key (ID 001) benannte Semaphore nicht bereits schon von einem anderen Prozess angelegt wurde:
(Nur mit Rootrechten werden alle Semaphoren angezeigt!) Gegebenenfalls bitte ich $key manuell auf einen Wert zu setzen, unter dem keine Semaphore im System angemeldet ist.
Ein Testen auf Windows ist ebenso erwünscht. Dabei ist mir die zwangsläufig folgende Fehlermeldung wichtig.
############## Hintergrund ##############
Da flock() derzeit auf multi-threaded Servern, wie dem apachen mit dem MPM worker nicht sauber arbeitet, soll dieses Script bis zu einer besseren Lösung -durch PHP selbst- zumindest auf Linuxsystemen Abhilfe schaffen.
Gruß aus Berlin!
eddi
Hallo Eddi,
Ich bitte aber in jedem Fall, um eine kurze Rückmeldung unter Angabe der Serversoftware + Version (+ MPM wenn apache) und der PHP Version + SAPI. Danke :)
Also, bei mir scheint es zu funktionieren (auch wenn es mich verwirrt hat, dass ab nicht immer exakt die Anzahl an Requests absetzt, die gewünscht ist, sondern davon leicht abweicht - ich dachte zuerst, das liegt an Deinem Script).
Mein System ist ein AMD Athlon XP 2500+ auf einem nForce2-Board mit 512 MB PC266-DDR-SDRAM. Softwaremäßig läuft ein Gentoo-Linux mit 2005.0-Profile, GCC 3.3.5, GLibc 2.3.4-20041102-r1, Linux 2.6.11-gentoo-r4:
Portage 2.0.51.19 (default-linux/x86/2005.0, gcc-3.3.5, glibc-2.3.4.20041102-r1, 2.6.11-gentoo-r4 i686)
CFLAGS="-march=athlon-xp -O3 -pipe -fomit-frame-pointer"
Als Apache läuft ein Apache 2.0.52-r1 (-r1 gibt an, dass da einige Gentoo-Patches drauf sind) - dieser läuft mit dem prefork-MPM, PHP läuft in der Version 4.3.10 (ich habe file_put_contents nachgerüstet, < http://de3.php.net/de/file_put_contents> <- die Funktion im ersten Kommentar).
Da flock() derzeit auf multi-threaded Servern, wie dem apachen mit dem MPM worker nicht sauber arbeitet, soll dieses Script bis zu einer besseren Lösung -durch PHP selbst- zumindest auf Linuxsystemen Abhilfe schaffen.
Wärst Du interessiert, Deine Lösung (wenn Du soweit bist) hier als Tipps&Tricks-Artikel bereitzustellen?
Viele Grüße,
Christian
Hallo Christian,
vielen lieben Dank :)
Also, bei mir scheint es zu funktionieren (auch wenn es mich verwirrt hat, dass ab nicht immer exakt die Anzahl an Requests absetzt, die gewünscht ist, sondern davon leicht abweicht - ich dachte zuerst, das liegt an Deinem Script).
Von local auf local getestet neigt "ab" dazu den Server zu überlasten. Beim Abzuprüfen dieser begebenheit ist nebenher leider auch eine sehr unschöne DoS-Möglichkeit zutage gefördert worden (vgl. https://forum.selfhtml.org/?t=105644&m=653366)
Mein System ist ein ...
Sehr ausführlich; wunderbar ;)
auch wenn Du oder weitere Mitleser einen apachen in Version 1.3.x hast/habt - jeder Test ist überaus hilfreich!
Wärst Du interessiert, Deine Lösung (wenn Du soweit bist) hier als Tipps&Tricks-Artikel bereitzustellen?
Das werde ich versuchen mit Tom, der hier entscheidene Vorarbeiten mit den Flatfiles-Scripten geleistet hat zu koordinieren.
Gruß aus Berlin!
eddi