Xampp einem PHP Prozess mehr Resourchen zuweisen (WINDOWS)
Snuggles
- php
Hallo,
ich habe lokal ein PHP Script was aus diversen Quellen Daten zusammensucht und eine Analyse fährt. Mein Problem ist der Prozess des Berechnens braucht wegen über 50.000 Schleifen und ausgiebieger Rechnungen ewig. PHP bietet pthreads zwar parallelisierungen an, doch da die Ergebnisse aufeinander aufbauen ist das keine Lösung. Auch ein Vorberechnen der Daten ist nicht sinnvoll da auch mit Livedaten gerechnent wird, die am Anfang der Rechnung benötigt werden.
Wie kann ich also Xampp bzw. dem Apache oder PHP mehr Systemrescourchen zuweisen?
Vielen Dank für eure Hilfe
Hallo,
über 50.000 Schleifen
meinst du hier wirklich 50000 Schleifen? Dann solltest du das Script optimieren. Meinst du eigentlich 50000 Schleifendurchläufe?
Gruß
Kalk
über 50.000 Schleifen
meinst du hier wirklich 50000 Schleifen? Dann solltest du das Script optimieren. Meinst du eigentlich 50000 Schleifendurchläufe?
Gruß
Kalk
Hallo Kalk,
du hast Recht es sind 4 Schleifen mit je ca. 50.000 Durchläufen.
Hallo,
du hast Recht es sind 4 Schleifen mit je ca. 50.000 Durchläufen.
auch dann drängt sich der Verdacht auf, das ließe sich optimieren. Aber ohne den Code zu kennen ist das natürlich Spekulation.
Gruß
Kalk
PS: habe das Recht-Tag entfernt, was hatte es damit auf sich?
auch dann drängt sich der Verdacht auf, das ließe sich optimieren. Aber ohne den Code zu kennen ist das natürlich Spekulation.
Hi,
also 99% der Last wird durch https://github.com/dZotov/shingles/blob/master/shingles.php erzeugt. Aber das ist so einfach da kann man glaube ich nicht viel drehen.
Moin!
also 99% der Last wird durch https://github.com/dZotov/shingles/blob/master/shingles.php erzeugt. Aber das ist so einfach da kann man glaube ich nicht viel drehen.
Das sieht aber schon recht "teuer" aus - und vor allem ergibt das, wenn das 50.000 mal gemacht wird, noch sehr viel mehr Schleifendurchläufe:
$text = trim(preg_replace(array('/\s\s+/', '/[^a-zA-Z0-9\s]/'), array(" ", ""), $text));
$text_array = explode(" ", $text);
$shingles = array();
$shingles_hash = array();
for ($i = 0; $i < count($text_array) - $this->m+1; $i++) {
$shingles[] = implode(" ",array_slice($text_array, $i, $this->m));
}
foreach ($shingles as $shigle) {
$shingles_hash[]=crc32($shigle);
}
Jörg Reinholz
Tach,
Wie kann ich also Xampp bzw. dem Apache oder PHP mehr Systemrescourchen zuweisen?
was meinst du damit? Das Script nimmt sich, was es kriegen kann; wenn es mehr RAM bräuchte, hätte es sich beschwert, mehr CPU kannst du im Prinzip über den Taskmanager zuweisen (ich vermute mal, dass das auch noch anders geht), also eigentlich eher dem Scheduler einen Hinweis geben, dass dieser Prozess wichtiger ist als die anderen.
mfg
Woodfighter
Hallo Woodfighter,
also der Prozess dauert um die 4 Min. Ich habe im Taskmanager httpd.exe die höchste Prio zugewiesen. Trotzdem ist wärend des Berechnends der Prozess bei 0% CPU last. Oder ist das der falsche Prozess, es regt sich nichts im Task-Manager wärend der Berechnung!?
Ich habe die Datenbankabfragen als Array zwischengespeichert und durchlaufen lassen. Hier haben wir nur ca. 10 Sek. Zeitersparnis das Problem liegt vermutlich den Systemrescourchen die sich das Script gönnen kann oder?
Tach,
Wie kann ich also Xampp bzw. dem Apache oder PHP mehr Systemrescourchen zuweisen?
was meinst du damit? Das Script nimmt sich, was es kriegen kann; wenn es mehr RAM bräuchte, hätte es sich beschwert, mehr CPU kannst du im Prinzip über den Taskmanager zuweisen (ich vermute mal, dass das auch noch anders geht), also eigentlich eher dem Scheduler einen Hinweis geben, dass dieser Prozess wichtiger ist als die anderen.
mfg
Woodfighter
Hallo,
also der Prozess dauert um die 4 Min. Ich habe im Taskmanager httpd.exe die höchste Prio zugewiesen. Trotzdem ist wärend des Berechnends der Prozess bei 0% CPU last.
natürlich, der Webserver wartet ja in der Zeit nur darauf, dass PHP fertig wird.
Oder ist das der falsche Prozess, es regt sich nichts im Task-Manager wärend der Berechnung!?
IMO sollte da ein Prozess php.exe zu sehen sein, der sich ordentlich bemerkbar macht. Wenn dessen CPU-Last auch auffallend niedrig ist, kann man davon ausgehen, dass nicht die Rechenleistung das Problem ist, sondern dass PHP die meiste Zeit auf irgendwas wartet (auf die Festplatte, auf die Netzwerkkarte, auf die Datenbank oder so).
Tach,
[Vollzitat entfernt]
Woodfighter
Und bitte zitiere sinnvoll, nicht einfach das gesamte Vorposting.
So long,
Martin
Moin!
50.000 Schleifendurchläufe sind an sich gar nichts, auch wenn das 4 mal stattfindet. Die Frage ist, was in den Schleifen passiert.
XAMMP ist nicht die "Krönung der besten Idee", sondern so genußreich wie lauwarmer Kaffee. Hinzu kommt: kaum jemand optimiert für Unixoide gedachte Programmiersprachen (hier PHP) ernsthaft für Windows.
Jörg Reinholz