FB18 - Das Forum für Informatik

fb18.de / Off-Topic / Hard- und Softwarefragen

Tuning von PHP, MySQL und Apache bis ans Äusserste

Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-03-03 16:08
joda_der_weise
Moin,

ich muss unseren Servern (kostenfreies Browsergame) "Luft" verschaffen und daher irgendwie PHP, MySQL und Apache bis aufs Äusserte tunen.

Momentan haben wir natürlich Tools wie Zend am laufen, aber vielleicht gibt es von Euch noch gute Tips und Ideen?

Leider können wir statt dem Apache nicht den Lighttpd nehmen, was natürlich deutlich performanter wäre.
Weiterhin sind wir natürlich parallel an der Programmierung am werkeln, damit diese noch deutlich performanter wird…

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-03-03 16:32
Wolf
1. Traffic per User reduzieren (Inhalte aufs Wesentliche reduzieren, Grafiken wiederverwenden, …)
2. Anzahl der Anfragen pro Spielzug reduzieren (Das hängt mit der Struktur eures Spiels zusammen)
3. Schleifen optimieren (Oft genug werden Schleifen im Code iterativ von 0 bis Ende durchgelaufen, das kann man machmal besser machen)
4. Sortier- und Schätzalgorithmen optimieren
5. Performance benutzter Third-Party-Anteile schätzen und ggf. selbst implementieren (Das kann auch mal in die Hose gehen, also ist es mit Vorsicht zu genießen)
6. Speicher vergrößern
7. CPU aufmotzen
8. Performanteren Netzanbieter wählen
9. Spiel dezentralisieren (Kommt auch auf die Spielstruktur an, wäre mal interessant zu wissen, von was für einem Browsergame Du da sprichst)

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-03-03 16:40
UncleOwen
1. Traffic per User reduzieren (Inhalte aufs Wesentliche reduzieren, Grafiken wiederverwenden, …)
Beliebt in diesem Zusammenhang auch: Grafikpakete zum Download anbieten, so dass die Grafiken gar nicht mehr vom Server geladen werden muessen.

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-03-03 16:53
Faleiro
Beliebt in diesem Zusammenhang auch: Grafikpakete zum Download anbieten, so dass die Grafiken gar nicht mehr vom Server geladen werden muessen.
Wie wuerde das technisch funktionieren, wenn der User keinen lokalen Webserver hat? Durch Links auf das lokale Dateisystem?

(Es ist doch ein Spiel mit Browserinterface, oder hab ich das falsch verstanden?)

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-03-03 16:55
Tzwoenn
Beliebt in diesem Zusammenhang auch: Grafikpakete zum Download anbieten, so dass die Grafiken gar nicht mehr vom Server geladen werden muessen.
Wie wuerde das technisch funktionieren, wenn der User keinen lokalen Webserver hat? Durch Links auf das lokale Dateisystem?

(Es ist doch ein Spiel mit Browserinterface, oder hab ich das falsch verstanden?)

Exakt. Der Benutzer muss in seinen Spieleinstellungen einen (lokalen) absoluten Pfad angeben, unter dem die Bilder liegen. Die Skripte setzen den dann halt nur noch vor jedes angeforderte Bild.

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-03-03 18:13
Lümmel
Apache, PHP und MySQL mit optimierten Flags compilieren. Falls möglich den Intel C/C++ Compiler einsetzen, der ist in bestimmten Szenarien 50% "schneller" als der gcc.


Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-03-03 20:11
MoKrates
Schnelleren Server besorgen. || Mehr Server besorgen. Optimiert zwar nur linear, aber mit einem Tuning werdet ihr auch nur linear besser :)

Mo

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-03-03 20:53
joda_der_weise
Also wir reden hier von www.ageofchange.de

Uns fehlt das entsprechende Sponsoring für einen weiteren Server und eine Hardwareerweiterung ist momentan auch nicht drin…

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-03-03 22:45
Anonymer User
Also wir reden hier von www.ageofchange.de
Fatal error: Cannot redeclare class mysqldb in /var/www/web1/html/run/_include/game/mysql/class.mysql.php on line 7

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-03-03 22:53
joda_der_weise
Darfst doch auch nicht rein schauen wenn wir gerade kleine Updates einspielen!! ;)
geht aber wieder schön und schick…

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-03-03 22:58
Anonymer User
geht aber wieder schön und schick…

Aber nicht alles [img]http://www.fb18.de/gfx/22.gif[/img]


Warning: start_aoc(_include/index/clans/class.clans.php): failed to open stream: No such file or directory in /var/www/web1/html/run/_include/index/start/class.start.php on line 34

Warning: start_aoc(_include/index/clans/class.clans.php): failed to open stream: No such file or directory in /var/www/web1/html/run/_include/index/start/class.start.php on line 34

Warning: start_aoc(): Failed opening '_include/index/clans/class.clans.php' for inclusion (include_path='.::/usr/share/pear') in /var/www/web1/html/run/_include/index/start/class.start.php on line 34

Fatal error: Cannot instantiate non-existent class: clans in /var/www/web1/html/run/_include/index/start/class.start.php on line 35


Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-03-04 09:22
joda_der_weise
Jap,

die Seite mit den Clans ist uns ein Dorn im Auge… ;)
Die ist schon etwas länger "under Construction" und unsere Spieler wissen das auch.
Aber du hast ja Recht, das sollte man so langsam fertig kriegen…

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-03-16 12:14
Da:Sourcerer
Also meine Tipps wären ja:

[*]httpd.conf ein wenig entrümpeln und nicht benötigte Module rausschmeißen (z.B. mod_speling, mod_userdir und mod_autoindex)
[*]Den mysqld Prozess etwas verschlanken. In der Defaulteinstellung bringt MySQL Unterstützung für datenbankformate mit, die du u.U. gar nicht benötigst. Also prüfe mal, ob du InnoDB und/oder BerkeleyDB Datenbanken hast. Wenn nicht, kannst du die Unterstützung dafür in der my.cnf abschalten (skip-innodb bzw. skip-bdb in der Sektion [mysql]. Weiter kannst du mal gucken, ob es nicht sinnvoller wäre, MySQL via UNIX-Sockets anstelle von TCP/IP anzusprechen. In der Masse sparst du damit eine ganze Menge an Overhead ein.

Und wo wir schon dabei sind: Verwendet ihr MySQL 4.1+? Dann guckt euch mal die mysqli-Erweiterung von PHP an. Die ist in einigen Fällen 'nen ganzen Tick schneller.


Zum Thema selbstkompilieren möchte ich ncoh sagen: Bei Apache und PHP kannst du das gerne mit eigenen CFLAGS tun (Ich empfehle mal -O3 -fexpensive-optimizations). Bei MySQL machst du das ganz genau einmal und dann nie wieder [img]http://www.fb18.de/gfx/25.gif[/img] Nimm da am besten die Binärpakete von hier. Die sind in der Regel optimiert genug.

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-03-17 12:03
joda_der_weise
Danke,

die BDB hatte ich vergessen zu skippen…

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-03-18 23:00
Deepthought
Ich wuerde zunaechst das System mal genauer untersuchen. Lasst einen Profiler ueber den PHP Code laufen und findet die Bottlenecks. Verbraucht der Code zu viel CPU Zeit, nutzt Unmengen an Speicher oder beides?

Warum laeuft der Server zu langsam? Zu viele Datenbank/Dateizugriffe? Oder fehlt Speicher und das System muss staendig swappen? Ist die Anbindung nicht schnell genug?

Nutzt einen kleinen, schnellen Webserver um die Bilder und sonstige statische Dinge abzuwickeln (z.B lighttp). Apache fuer den PHP Kram.
EDIT: die statischen Inhalte koenntet ihr auch von einem anderern Server abwickeln lassen, ein kleiner vServer kostet nur ein paar EUro im Monat und kann mit lighttp ne Menge Daten abwickeln

Ihr habt ja schon ein "Front Controller" in eurer index.php. Das koenntet ihr nutzen um die dynamischen Seiten zu cachen, falls ihr das nicht schon macht. Nur bei relevanten Aenderungen an der Datenbank werden die Seite oder einzelne Seitenteile aus der Datenbank aufgebaut, sonst wird einfach der gecachte HTML Code ausgespuckt.

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-03-19 10:04
cheek
ansonsten einfach evt mal andere dbs testen, grade postgresql ist in einigen bereichen sehr performant.

und des kannste auch mit O3 compilieren ^^, das andere sid eure sql statements, guggn ob ihr da noch optimieren koennt, zb auf stored prozedures ausweichen, die sind um einiges schenller und man verhindert sql injections. das geht zwar nicht immer aber die meisten abfragen sind ja nur informel und daher recht gut darin verpackbar :>

von triggern wuerd ich bei nem browser game generell abraten.

der tip mit den sockets vs tcpip gilt hier genauso, die sockets sind um einiges schneller.

da ihr das mit dem webserver relativ leicht skalieren koennt, waere es auch angebracht das gleiche fuer die db server anzusetzten. ich kenn mich nicht sonderlich gut mit mysql aus, daher keine ahnung wie leicht man dort clustering aktivieren kan. bei postgreslq ist das nur nn install/conf prob und relativ leicht.

das andere sind dei abgefragten informationen, bis auf die die immer dynmisch generiert werden sollten alle die laenger als ne std statisch bleiben(weltkarte oder so) auch so makiert sein, das der client browser das auch so handelt (bringt zwar nix wenns der user ausstellt aber wer macht des schon :>)

gruss
cheek

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-03-19 11:47
Da:Sourcerer
da ihr das mit dem webserver relativ leicht skalieren koennt, waere es auch angebracht das gleiche fuer die db server anzusetzten. ich kenn mich nicht sonderlich gut mit mysql aus, daher keine ahnung wie leicht man dort clustering aktivieren kan. bei postgreslq ist das nur nn install/conf prob und relativ leicht.

Unter MySQL ist das leider etwas schwieriger. Ohne das jemals selbst gemacht zu haben: Man benötigt dazu die MaxDB Erweiterung von MySQL. Die bläht die gesammte Installation aber recht weit auf, wenn ich mich recht entsinne…

Was ich sonst noch vergessen hatte: Wenn ihr den TCP/IP-Teil von MySQL nicht verwendet, könnt ihr den mit skip-networking abschalten. Das gibt dann noch etwas mehr freien Speicher.

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-03-19 15:16
joda_der_weise
Clustering ist auch bei MySQL kein großes Ding… ;)

Aber leider ist es recht schwierig zu clustern, wenn man keinen weiteren Server hat… :)
Dann wäre auch die Trennung von Web- und DB-Server ganz leicht.

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-04-01 19:50
joda_der_weise
Wir stellen nun zum Wochenende endlich auf zwei neue Server um.
Einer etwas größer (Opteron 146, 2 GB RAM) und einer etwas kleiner (Opteron 144, 1GB RAM).

Welchen würdet Ihr als DB und welchen als Webserver nehmen?

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-04-01 21:16
Tzwoenn
Für DBs gilt generell… je mehr Speicher, desto besser kann gecached werden. Nen Webserver kommt da mit weit weniger aus und nutzt soweit ich weiss nur den OS-Cache.

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-04-01 21:18
GroßerSchöpfer
Hmm, warum kauft ihr eigentlich erst Hardware und überlegt dann was ihr genau damit machen wollt? Wäre es nicht sinnvoller erst mal zu überlegen was man braucht und dementsprechend zu kaufen?

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-04-01 21:45
joda_der_weise
Ganz einfach:

Unser Sponsor stellt uns was und wir müssen entweder das nehmen oder dürfen uns natürlich jeder Zeit einen neuen Sponsor suchen…

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-04-03 00:20
cheek
hmm, die config so macht nicht wirklich nen unterschied ausser evt der ram.
ansonsten wuerde ich versuchen ne kleinere mysql mit meist statischen sachen mit auf das grosse baby zu legen und die db-rechen intensiven aufgaben auf den kleineren.
muss man halt bedenken wenn man die seiten zusammen schraubt was wo liegt :>

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-04-03 01:08
Tzwoenn
ansonsten wuerde ich versuchen ne kleinere mysql mit meist statischen sachen mit auf das grosse baby zu legen und die db-rechen intensiven aufgaben auf den kleineren.
muss man halt bedenken wenn man die seiten zusammen schraubt was wo liegt :>

Mit welcher Begründung? Davon abgesehen werden relationale Beziehungen - soweit sie verwendet werden - mit dieser Verteilung schwer umzusetzen sein.

Re: Tuning von PHP, MySQL und Apache bis ans Äusserste 2006-04-03 19:37
cheek
warum sollten damit relationen schwieriger umzusetzen sein? man hat in nem cluster domaenen, sry wenn das so rueberkam ich meinte keine 2 verschiedenen datenbanken, das macht nur eingeschraenkt sinn.

aber bei daten die nicht oder nur teilweise inr elation zueinander stehen macht es schon sinn, da ich aber keen plan von seiner db hab kann ich dazu auch nix sagen und sprach nur von den moeglichkeiten, ne endgueltige loesung wird er ohne uns die struktur zu nennen eh nicht kriegen :P