PHP5-cgi Performance optimieren

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Allerseits,

    ich habe einen webserver mit lightttp aufgesetzt und fastCGI mit PHP5 installiert.

    Meine Anwendung ruft im Sekundentakt PHP Skripte auf, diese generieren aus der Datenbank HTML welcher dann mit der Antwort in divs eingebunden wird. Somit werden Daten aus der DB aktuell auf der Website angezeigt.

    Auf bisherigen Systemen lief das auch, auch auf sehr schwachbrüstigen netbooks. Auf dem rasperry scheine ich aber an Grenzen zu kommen.

    Pro Aufruf sind ca. 2,5 s benötigt.

    Hat jemand ne Idee, wie ich das optimiert bekomme?

    Vielen Dank im Voraus und beste Grüße

    Lyn

  • Oft kann man Query's für die Datenbank optimieren. Wenn man zum Beispiel mit

    SQL
    SELECT * FROM Table

    arbeitet ist es natürlich langsamer als wenn nur die gezielten Spalten ausliest. Dies wird sehr langsam, wenn man mit großen Datenmengen arbeitet. Und wie man weiß ist der RPi ja schnell an seine Grenzen angekommen was das angeht ;)

    Des Weiteren sollte man drauf achten, dass am besten mit einkompilierten Funktionen von PHP nutzt. Gutes Beispiel dafür sind die Such- / Sortieralgorithmen. Wenn man diese in PHP Code schreibt, sind die natürlich viel langsamer als die, die von PHP geliefert werden. Denn die mitgelieferten Funktion von PHP sind in C / C++ geschrieben und können viel schneller arbeiten. Ausserdem ist da die Chance dass unnötige Sachen berechnet werden fast Null.
    Manchmal passiert es auch, dass man unnötige Umwege geht und so unnötig Zeit verloren geht. Auch sollten nicht all zu oft Dateizugriffe gemacht werden (Aber so wie du dein Skript beschrieben hast, ist das ja nicht so dein Problem, aber ich möchte das hier der Vollständigkeitshalber mal aufschreiben). Denn wenn man ganz oft eine Datei öffnen muss, was reinschreibt und dann wieder schließt ist es ja klar, dass das Skript lange braucht bis es fertig ist. Sowas kommt dann ganz gut wenn man solche Sequenzen in Schleifen laufen lässt :rolleyes:
    Wenn man nun selbst wirklich große und langwierige Algorithem hat, könnte man sich überlegen selbst eine Extension für PHP zu schreiben und dies mit einzukompilieren. PHP Extensions werden, wie der PHP-Kern, in C/C++ programmiert. Und das geht schon tiefer in die Materie. Es ist nicht so, dass man sich einfach mal hinsetzen kann und schnell eine Erweiterung schreibt. Dies macht aber sehr oft nur in Ausnahmefällen Sinn. Tutorials dazu solltest du bei Google finden können.


    Also hier mal eine kleine Todo-Liste für dich:

    • Überprüfe ob du deine Querys optimieren kannst
    • Eventuell auf PHP-Funktionen zurückgreifen die das ganze schneller machen
    • Unnötige Funktionsaufrufe / Sequenzen entfernen

    Aber um genaueres sagen zu können, müsstest du uns deinen Code mitteilen und uns deinen Datenbankaufbau zeigen (inklusive Datensätze)

  • Ich würde als erstes mal ganz oben beim Webserver ansetzen, auf dem Raspberry Pi habe ich mit Cherokee die besten werte erreicht (Wird auch in der 1.0 Version des PCC der empfohlene Webserver). Dannach ist vorraussichtlich das größte Potential zum Optimieren die Datenbankabfrage. Mit dem PHP Quelltext kann man zwar ein wenig raus holen aber bei einfachen Scripten ist das in der regel so gut wie nichts.

    Gut wären ein Paar Informationen zur Datenmenge und beschaffenheit sowie das SQL Query welches du zum abfragen verwendest, da sind vor allem Sortierfunktionen interessant die Temporäre Tabellen erfordern was viel Speicher und Zeit benötigt.

  • Hallo,

    vielen Dank für die Antworten und sorry, dass ich mich erst jetzt wieder melde. Das Projekt musste leider durch Urlaub und andere Themen etwas auf Eis gelegt werden, jetzt habe ich es mir aber wieder vorgenommen.

    Also da der process myslq mit 1-5% vor sich hin idled bin ich mir ziemlich sicher, dass die mysql abfragen nicht das problem sind. Ja ich arbeite mit temporären tabellen, aber nicht mit großen Datenmengen. Im Moment sind die größten Tabellen vielleicht 3000-4000 Einträge groß.

    Das Projekt ist für einen Kunden, daher kann ich hier nicht einfach größere Mengen an Quell-Code posten.

    Ich gebe Euch mal ein Beispiel für eine Abfrage (alle sind bei mir in Stored Procedures gekapselt):

    Dieser Aufruf wird auf der Konsole in 0.04 Sekunden ausgeführt.

    Das PHP Skript, welches über jQuery aufgerufen wird sieht so aus:

    Das ganze wird dann in jquery ausgewertet und an bestimmten Bereichen der Website ins DOM eingefügt.

    mit Firebug kann ich sehen, dass der Aufruf des PHP files komplett 5.40 sec dauert.

    Der PHP Prozess läuft dann auf Hochtouren mit 40-50% pro Aufruf (in der Regel werden zwei Skripte parallel aufgerufen, also zwei Prozesse a 40-50%).

    Ich vermute, dass an der Configuration des Web-Servers was gemacht werden kann, kenne mich da aber leider zu wenig aus.

    Hoffe, jemand hat einen Tipp und schon mal vielen Dank im Voraus.

    Beste Grüße

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!