UPDATE: Problem erkannt, hat nichts mit php zu tun, hängt mit dem precaching von dateisystemen unter ubuntu zusammen (offenbar). vgl letzten post. kann mir damit jemand helfen?
Hallo allerseits!
ich hoffe mal im voraus, dass ich mit meinem ersten post hier im forum nicht alles falsch mache, konnte allerdings suchenderweise keine lösungen für das angetroffene problem finden. ich weiß zudem nicht, obs ein problem von php ist, oder mit ubuntu zusammenhängt, aber ich bin mittlerweile völlig ratlos.
kurz zusammengefasst: bei bestimmten skripts mit langen laufzeiten fällt nach kurzer zeit die prozessorauslastung auf ein bruchteil (vorher 100% auslastung, nachher vielleicht 20-40%) und die skriptlaufzeit steigt entsprechend brachial an.
das seltsamste an dem ganzen ist, dass das problem
a) nicht genau reproduzierbar ist (die verlangsamung setzt nicht immer zur selben zeit ein) und
b) nach einigen durchläufen des skripts nicht mehr auftritt. dann arbeiten alle belegten threads auf 100%, bis das skript terminiert. starte ich dann allerdings ein anderes, ähnliches skript, tritt das problem wieder auf, und ist wiederum erst nach einigen durchläufen verschwunden. das ist zwar eine lösung, aber nicht wirklich befriedigend, v.a. wenn das skript verlangsamt etwa 15-45 minuten laufzeit hat. ich habe auch noch kein zuverlässiges muster erkennen können.
die skripten, bei denen dies auftritt, arbeiten ein verzeichnis mit zw. 70k und 350k html-dateien ab, formatieren und filtern diese (per regulären ausdrücken) und erzeugen postgresql-dumps zum einbinden der daten in datenbanken.
mir ist bewusst, dass man für solche aufgaben eher andere sprachen verwenden würde, aber php bietet einige funktionalitäten, die ich bspw. unter perl vermissen würde.
mein arbeitsrechner ist ein xeon 3550 mit 24gb ram, ich benutze ubuntu 10.10 mit gnome als oberfläche sowie php 5.3.2.
das problem ist besonders auffällig, wenn ich die skripten multithreaded laufen lasse: hierbei verwende ich einen wrapper für pcntl_fork() (vgl.HIER).
das skript erzeugt damit für die ersten 5-10 sekunden vollast auf allen 8 threads (oder sovielen wie gewünscht), dann fällt die leistung ab, 7 threads laufen idle und einer hat fortan wie im vorherigen fall 20-40% last.
das bedeutet also, dass ubuntu scheinbar alle entstandenen prozesse auf einen einzigen, gedrosselten thread zusammenlegt.
tritt das problem nicht auf, läuft so ein skript nur zw. 1 und 6 minuten, sonst kann es schon mal 45 minuten laufen.
das problem tritt auch auf, wenn ich per nice die priorität der prozesse festlege oder die affinität der prozesse vorgebe. genauso hat es nichts geholfen, sämtliche energiesparmaßnahmen zu deaktivieren (wobei das ja eh keinen sinn machen würde, dei cores sind ja nicht mehr ausgelastet wenn es passiert)
falls ich wichtige informationen vergessen haben sollte, lasst es mich bitte wissen, ansonsten bin ich für absolut jede hilfe dankbar!
René
Hallo allerseits!
ich hoffe mal im voraus, dass ich mit meinem ersten post hier im forum nicht alles falsch mache, konnte allerdings suchenderweise keine lösungen für das angetroffene problem finden. ich weiß zudem nicht, obs ein problem von php ist, oder mit ubuntu zusammenhängt, aber ich bin mittlerweile völlig ratlos.
kurz zusammengefasst: bei bestimmten skripts mit langen laufzeiten fällt nach kurzer zeit die prozessorauslastung auf ein bruchteil (vorher 100% auslastung, nachher vielleicht 20-40%) und die skriptlaufzeit steigt entsprechend brachial an.
das seltsamste an dem ganzen ist, dass das problem
a) nicht genau reproduzierbar ist (die verlangsamung setzt nicht immer zur selben zeit ein) und
b) nach einigen durchläufen des skripts nicht mehr auftritt. dann arbeiten alle belegten threads auf 100%, bis das skript terminiert. starte ich dann allerdings ein anderes, ähnliches skript, tritt das problem wieder auf, und ist wiederum erst nach einigen durchläufen verschwunden. das ist zwar eine lösung, aber nicht wirklich befriedigend, v.a. wenn das skript verlangsamt etwa 15-45 minuten laufzeit hat. ich habe auch noch kein zuverlässiges muster erkennen können.
die skripten, bei denen dies auftritt, arbeiten ein verzeichnis mit zw. 70k und 350k html-dateien ab, formatieren und filtern diese (per regulären ausdrücken) und erzeugen postgresql-dumps zum einbinden der daten in datenbanken.
mir ist bewusst, dass man für solche aufgaben eher andere sprachen verwenden würde, aber php bietet einige funktionalitäten, die ich bspw. unter perl vermissen würde.
mein arbeitsrechner ist ein xeon 3550 mit 24gb ram, ich benutze ubuntu 10.10 mit gnome als oberfläche sowie php 5.3.2.
das problem ist besonders auffällig, wenn ich die skripten multithreaded laufen lasse: hierbei verwende ich einen wrapper für pcntl_fork() (vgl.HIER).
das skript erzeugt damit für die ersten 5-10 sekunden vollast auf allen 8 threads (oder sovielen wie gewünscht), dann fällt die leistung ab, 7 threads laufen idle und einer hat fortan wie im vorherigen fall 20-40% last.
das bedeutet also, dass ubuntu scheinbar alle entstandenen prozesse auf einen einzigen, gedrosselten thread zusammenlegt.
tritt das problem nicht auf, läuft so ein skript nur zw. 1 und 6 minuten, sonst kann es schon mal 45 minuten laufen.
das problem tritt auch auf, wenn ich per nice die priorität der prozesse festlege oder die affinität der prozesse vorgebe. genauso hat es nichts geholfen, sämtliche energiesparmaßnahmen zu deaktivieren (wobei das ja eh keinen sinn machen würde, dei cores sind ja nicht mehr ausgelastet wenn es passiert)
falls ich wichtige informationen vergessen haben sollte, lasst es mich bitte wissen, ansonsten bin ich für absolut jede hilfe dankbar!
René
Kommentar