Snuggles: Xampp einem PHP Prozess mehr Resourchen zuweisen (WINDOWS)

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

  1. 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

    1. ü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.

      1. 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?

        1. 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.

          1. 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

  2. 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

    1. 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

      1. 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

  3. 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