User since
2003-08-15
2653
Artikel
BenutzerIn
ist eigentlich egal was fürn dateihandling ich mache... aber der dateischutz flock() scheint irgendwie bei großem serverbetrieb zu versagen !
Ich habe schon so einige Beispiele aus dem Internet (von den verschiedensten sites) bezogen und ausprobiert, aber selbst beim einfachen Counter ist irgendwann die Datei einfach leer.
Das Phänomen tritt eigentlich nur ein, wenn besonders hoher Betrieb auf meinem Apache server besteht, meistens so ab 7 Requests pro Sekunde. Danach sind einige Dateien in die von den Scripten geschrieben wird leer.
Kann das sein, dass so das mit den multithreads vom apache2 zusammenhängt oder so? Könnte doch theoretisch sein, dass sich da etwas überschneidet oder?
Oder gibts da für den Apache irgensoeine Sonderregelung fürs Locking?
liebe grüße
User since
2005-01-17
14761
Artikel
Admin1
Zwischen open() und flock() könnte es bei viel Betrieb vielleict eine Race-Condition geben.
User since
2003-08-04
12208
Artikel
Admin1
@froschpopo: ich würde sagen, der fehler liegt in zeile 41, wobei meine glaskugel
heut nicht ganz so doll funktioniert, also vielleicht ist es auch zeile 42.
edit:
den wiki-artikel dazu hast du gelesen, ja?\n\n
<!--EDIT|pq|1130857614-->
User since
2005-01-17
14761
Artikel
Admin1
sysopen() ist auch ziemlich sicher für Sperren.
User since
2003-08-04
12208
Artikel
Admin1
[quote=GwenDragon,01.11.2005, 15:30]Zwischen open() und flock() könnte es bei viel Betrieb vielleict eine Race-Condition geben.[/quote]
wie meinst du das?
erst das flock() sperrt die datei, vorher sollte man keine annahmen
machen.
und flock() selbst ist atomar.
User since
2003-08-21
2614
Artikel
ModeratorIn
Ich wuerd auch sagen: Du benutzt flock einfach falsch. Zeig etwas Code, dann koennen wir drueber diskutieren.
Und dass es nur bei großem Load auftritt, ist ja klar, denn das haben Race Conditions so an sich.
User since
2003-08-15
2653
Artikel
BenutzerIn
open(FILE, ">/srv/www/htdocs/tables/rows/base.csv") or die $!;
flock FILE, 2;
print FILE @cont;
flock FILE, 8;
close(FILE);
\n\n
<!--EDIT|Froschpopo|1130913002-->
User since
2003-08-04
14371
Artikel
ModeratorIn
wenn dann in @cont nix drin ist, ist die Datei leer...
User since
2003-08-15
2653
Artikel
BenutzerIn
ich habs mit nem minimalscript gemacht:
#!/usr/bin/perl
@cont = ("asidjaoisdhaiosdhaiushdiuashds");
open(FILE, ">/srv/www/htdocs/tables/rows/base.csv") or die $!;
flock FILE, 2;
print FILE @cont;
flock FILE, 8;
close(FILE);
jetzt heute morgen ist nicht soviel los, aber gestern abend hatte ich fast 20 requests pro Sekunde und da war auch dieses einfache Script irgendwann überfordert mit und hat die Datei geleert.
User since
2003-08-04
7321
Artikel
ModeratorIn
lass mal bitte das letzte flock weg!
siehst du, hast es doch falsch verwendet!