PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Apache Lastverteilung


Kinman
2008-01-28, 12:30:08
Hi, folgendes Problem:
Ich habe ein PHP-Script, welches eine hohe Serverlast erzeugt. Bei meiner Apache (Test-)Konfiguration ist jedoch so, dass parallel zu diesem Script nichts mehr ausgeführt wird.

Wie kann ich jetzt Apache oder PHP so konfigurieren, dass ein Script beispielsweie nur max. 20% der Verfügbaren Leistung bekommt?

mfg Kinman

EDIT: Ok, das Problem äußert sich anders...
Das Script blockiert auch auf dem normalen Webserver (bei al-inkl) sämtliche anderen Scripts auf meinen Account.
Habe ich in diesem Script, welches die Last erzeugt, irgendwelche Möglichkeiten, die Priorität zu ändern? Das Script läuft auch bei user abort weiter...

Danke, mfg Kinman

Berni
2008-01-28, 15:50:20
Was ist das denn für ein Skript? Selbst geschrieben? Eigentlich solltest du erst mal schauen, was für die schlechte Performance schuld ist...

Kinman
2008-01-28, 16:10:14
Ja, das Script ist selbstgeschrieben und von der Grundperformance schon recht gut. Es sind nur viele Wiederholungen drin.

Die Scriptausführungszeit kann trotzdem je nach Aufgabe zwischen wenigen Sekunden und mehreren Minuten laufen.
Parallel dazu sollte ein weiteres Script laufen, welches den Status der Verarbeitung durch das erste Überprüft und den Benutzer anzeigt.

Im Prinzip ist das nichts andres als ein Scheinmultithreading, aber anders lässt sich das nicht lösen.

Trotzdem Danke!
mfg Kinman

The_Invisible
2008-01-28, 20:10:49
schon mal versucht ein paar sleep() befehle einzubauen?

ansonsten würde ich eine programmiersprache mit richtigem threading nehmen, php kann eben auch nicht alles.

mfg

Coda
2008-01-28, 20:12:01
PHP kann Threading - hilft hier aber auch nichts, da es eh immer nur einen Request "sieht".

Allerdings ist es sehr ungewöhnlich, dass das Script andere blockiert, denn Apache servt normalerweise ohne Probleme sowieso mehrere Requests.

The_Invisible
2008-01-28, 20:35:49
klar kann php threading, nur hat man keine kontrolle darüber.

in punkto apache gibt es ja verschiedene mpms, manche mit threading und andere nicht, vielleicht hier mal herumprobieren.

mfg

Kinman
2008-01-28, 22:51:44
Das komische ist, wenn ich statt den eigentlichen Befehlen nur sleep() ausführe, verhält es sich gleich.

Ich werde morgen versuchen, dem weiter auf dem Grund zu gehen. Natürlich werde ich weiter berichten.

PHP ist jedenfalls unumgänglich in diesem Fall.

Gibt es eigentlich eine Möglichkeit vom Server aus die Verbindung zu beenden, aber das Script trotzdem weiterarbeiten lassen?

Wenn alles nichts nützt, muss ich wohl oder übel auf CronJobs zurückgreifen :(

mfg Kinman

ethrandil
2008-01-28, 23:40:29
forget it ^^

Kinman
2008-01-29, 10:10:27
Ok, folgendes habe ich herausgefunden:
Wenn ich mit zwei Browsern arbeite (z.B. Opera + IE), in einem Browser den Vorgang anstoße, so kann ich im anderen Browser den Status jederzeit abfragen, d.h. das zweite Script wird ausgeführt.

Jedoch kann ich im selben Browser den Status nicht abfragen, da das zweite Script erst nach der Beendigung des Ersten ausgeführt wird.

mfg Kinman

EDIT:
Fehler gefunden: Die Session blockiert die Ausführung
Trotzdem Danke für die Hilfe!

mfg Kinman

Coda
2008-01-29, 14:32:34
klar kann php threading, nur hat man keine kontrolle darüber.
Hat man.
http://de2.php.net/manual/en/function.pcntl-fork.php

Marscel
2008-01-29, 15:08:47
Mist, ist es eigentlich so schwer für Windows etwas equivalentes zu entwickeln (ja, ich weiß CreateProcess() und fork() sind schon ne kleine Welt), dass es sich nicht lohnt? Es muss doch einen Grund geben.

Ich hab auch eine größere Anwendung in PHP, die teilweise Netzwerkaktivitäten ausführt und dabei das ganze Skript anhält, wobei das nicht essentiell für die weitere Ausführung ist weshalb ich es gerne in einen anderen Thread/Prozess packen würde, während der Rest weiterläuft.

rotalever
2008-01-29, 17:03:19
Was soll das script denn eigentlich überhaupt machen, dass es so viel Zeit verbraucht?

Kinman
2008-01-29, 18:57:59
Gewisse Dinge abarbeiten (CPU Power) und Kommunikation mit einem anderen Server (Wartezeiten).

Mehr kann ich leider nicht veraten. Aber das Problem war, wie Anfangs total falsch angenommen, die Session, da das eine Script die Session gesperrt hat und somit das zweite Script nicht über session_start() gekommen ist.

mfg Kinman