Webserver Performance Tuning
Posted: 2006-12-11 12:51
Für zwei Browsergames nutze Ich derzeit folgende Serverumgebung:
- je Browergame 1x Webserver Opteron 165 Dual Core 2GB Ram 2x 2*250 GB Festplatten (RAID1)
- 2x DB- Server MySQL 5 master/slave Opteron 165 Dual Core 2GB Ram 2x 2*250 GB Festplatten (RAID1) Die 2 DB Server teilen sich die beiden Games. Load auf beiden Kisten jeweils unter 3
Mein Flaschenhals ist der zweite Webserver des grafisch aufwändigeren Browsergames. Auf diesem Webserver verwende Ich derzeit folgende Software:
- lighttpd 1.4.13 mit php 4.4.4 als fast-cgi
(lighttpd.conf)
Ich habe bereits den Performance- Teil der Lighttpd Doku gelesen und meine conf dahingehend angepasst.
Als OpCode Cache läuft derzeit PECL-APC mit den Standardeinstellungen
(Auszug php.ini)
Das sind die Standard- Einstellungen, wie sie auch bereits hierempfohlen wurden.
Das Problem an der Sache ist, dass beim Aufruf eines Kartenausschnitts (macht der User relativ häufig, klick mich) ca. 100 kleine Gif- Bilder geladen werden müssen. Diese Werden auf der PHP Seite per div Layern übereinander gelegt. Es entsteht also eine sehr große Anzahl an "statischen" Requests, bei denen hauptsächlich Bilder angefordert werden.
Ich hatte in der vorherigen Konfiguration Apache2 prefork mit den Std- Einstellungen sowie PHP5.2 mit Zend Optimizer verwendent. Bei ca. 40 eingeloggten Usern entstand so eine Load von > 100 - ein untragbarer Zustand.
Unter der jetzigen Konfiguration liegt die Load bei ca. 20 gleichzeitigen Benutzern etwa unter 3. Dabei dauert die Seitenauslieferung jedoch extrem Lange, teilweise länger als 7 Sekunden zu Stoßzeiten.
Leider habe Ich gerade keinen Auszug von top zu Stoßzeiten zur Hand. Wie beschrieben lag die Load jedoch unter 3, es wurden 1.4 von 2 GB RAM benutzt. Ich werde euch die Ausgabe von top im Lastzustand heute Abend mal hier rein posten, doch vielleicht hat ja einer schon ne Idee, woran es liegen könnte.
- je Browergame 1x Webserver Opteron 165 Dual Core 2GB Ram 2x 2*250 GB Festplatten (RAID1)
- 2x DB- Server MySQL 5 master/slave Opteron 165 Dual Core 2GB Ram 2x 2*250 GB Festplatten (RAID1) Die 2 DB Server teilen sich die beiden Games. Load auf beiden Kisten jeweils unter 3
Mein Flaschenhals ist der zweite Webserver des grafisch aufwändigeren Browsergames. Auf diesem Webserver verwende Ich derzeit folgende Software:
- lighttpd 1.4.13 mit php 4.4.4 als fast-cgi
(lighttpd.conf)
Code: Select all
server.document-root = "/srv/www/vhosts/xxxxx/"
server.port = 80
server.modules = (
"mod_fastcgi"
)
fastcgi.server = ( ".php" => ((
"bin-path" => "/usr/local/php-4.4.4/sapi/cgi/php",
"socket" => "/tmp/php.socket",
"max-procs" => 1,
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "16",
"PHP_FCGI_MAX_REQUESTS" => "10000"
),
"bin-copy-environment" => (
"PATH", "SHELL", "USER"
),
"broken-scriptfilename" => "enable"
)))
mimetype.assign = (
".html" => "text/html",
".txt" => "text/plain",
".jpg" => "image/jpeg",
".png" => "image/png"
)
server.max-keep-alive-requests = 0
server.network-backend = "writev"
server.event-handler = "linux-sysepoll"
server.stat-cache-engine = "fam"
index-file.names = ( "index.php", "index.html", "index.htm" )Als OpCode Cache läuft derzeit PECL-APC mit den Standardeinstellungen
(Auszug php.ini)
Code: Select all
extension = apc.so
apc.enabled="1"
apc.shm_segments="1"
apc.shm_size="128"
apc.optimization="0"
apc.num_files_hint="1000"
apc.ttl="3600"
apc.user_ttl="3600"
apc.gc_ttl="3600"
apc.cache_by_default="1"
apc.filters=""
apc.mmap_file_mask="/apc.shm.XXXXXX"
apc.slam_defense="0"
apc.file_update_protection="2"
apc.stat="1"Das Problem an der Sache ist, dass beim Aufruf eines Kartenausschnitts (macht der User relativ häufig, klick mich) ca. 100 kleine Gif- Bilder geladen werden müssen. Diese Werden auf der PHP Seite per div Layern übereinander gelegt. Es entsteht also eine sehr große Anzahl an "statischen" Requests, bei denen hauptsächlich Bilder angefordert werden.
Ich hatte in der vorherigen Konfiguration Apache2 prefork mit den Std- Einstellungen sowie PHP5.2 mit Zend Optimizer verwendent. Bei ca. 40 eingeloggten Usern entstand so eine Load von > 100 - ein untragbarer Zustand.
Unter der jetzigen Konfiguration liegt die Load bei ca. 20 gleichzeitigen Benutzern etwa unter 3. Dabei dauert die Seitenauslieferung jedoch extrem Lange, teilweise länger als 7 Sekunden zu Stoßzeiten.
Leider habe Ich gerade keinen Auszug von top zu Stoßzeiten zur Hand. Wie beschrieben lag die Load jedoch unter 3, es wurden 1.4 von 2 GB RAM benutzt. Ich werde euch die Ausgabe von top im Lastzustand heute Abend mal hier rein posten, doch vielleicht hat ja einer schon ne Idee, woran es liegen könnte.