Lastverteilung/Begrenzung Apache2

tweans

Registered User
Mahlzeit !

Ich hoffe, man wird hier für Newbie-Fragen nicht sofort gesteinigt 8)

Also: Ich habe mir bei Strato (jaja, nicht lachen ;-)) einen dedizierten Server gemietet, um ein Browsergame anzubieten.

Auf dem Server ist Confixx installiert, so dass ich recht einfach und DAU-sicher Webs anlegen kann. Alles schön und gut. Ich habe mir also zwei Webs angelegt, eines für die Wirkversion des Spiels und eine für die Dev-Version.

Inzwischen haben die Zugriffszahlen stark zugenommen. Heute waren teilweise 50 Leutchen online und das Spielchen wurde quälend langsam (Generierungszeiten > 15 Sekunden). Eigentlich hatte ich mich damit abgefunden, dass offenbar bei 40-50 Usern die Kapazitätsgrenze der Kiste erreicht ist. Zufällig habe ich aber heute zum Zeitpunkt des Besucheransturms meine Dev-URL aufgerufen, und die rannte wunderbar schnell.

Folglich gibt es offenbar die Möglichkeit, die Last/Connections für eine URL zu begrenzen. Nur WO ?

Auf der Strato-Kiste löppt ein Apache2.

Es wäre klasse, wenn mir jemand 'nen Tipp geben könnte !

Gruß aus dem Münsterland,
Stefan
 
Hallo Stefan!
1. Für sinnvolle Fragen wird hier niemand gesteinigt.
2. Zum Thema Strato: Ich auch - und der läuft prima.

Nun zum Thema.
Das Performanceproblem scheint mir eher Applikationsabhängig zu sein. Denn sowohl die aktive als auch die Entwicklerversion des Online-Spiels werden doch vom selben Apache Server bedient.
Nun ist die Frage, ob man innerhalb der Anwendung ein Maximum setzten kann. Oder du schaltest eine Statusabfrage als Startseite davor, z.B.
  • Gameserver #1 30 Spieler
  • Gameserver #2 5 Spieler
  • ...
Dann könnten sich deine Benutzer den am wenigsten belasteten Server aussuchen.

mfG
Thorsten
 
Hi Thorsten !

Danke für die schnelle Antwort !

Thorsten said:
Das Performanceproblem scheint mir eher Applikationsabhängig zu sein. Denn sowohl die aktive als auch die Entwicklerversion des Online-Spiels werden doch vom selben Apache Server bedient.

Jep, das ist natürlich so. Nur laufen beide Versionen für unterschiedliche User, die ich via Confixx angelegt habe. Und wenn die Wirkversion lahmt und die Dev-Version rennt, bedeutet das für mich, dass der Server selber irgendwo Lastbegrenzungen für die einzelnen User besitzt, da ja sonst auch die Dev-Versionen lahmen müsste.

Thorsten said:
Nun ist die Frage, ob man innerhalb der Anwendung ein Maximum setzten kann. Oder du schaltest eine Statusabfrage als Startseite davor

Klar, das würde gehen, aber ich hätte lieber die elegantere Lösung, sprich die Konfigurationsdatei, in welcher diese Begrenzung steckt, ausfindig machen und der Wirkversion die maximal mögliche Performance zu spendieren :-)

Gruß,
Stefan
 
Also, ich stimme damit überein, dass es nicht der Rechner als solcher sein kann/sollte.

- Was gibt der "top"-Befehl auf der Kommandozeile aus, wenn "es eng wird" ?
- Mit was ist die App "Browsergame" geschrieben ?
- Intensives Nutzen von Datenbanken (mySQL)?

Ein Browsergame anzubieten, ist mir auch schon im Kopf herumgegangen. Deshalb muss ich mich hier einfach mit 'reinhängen :D
 
Für Apache2 gibt's irgendwo 'ne .conf-Datei, in der Du die prefork-Klamotten einstellen kannst (Threads pro Prozess, max. Anzahl Prozesse, usw.).

Leider ist mein kleiner vServer zur Zeit noch immer down, so dass ich Dir den Namen der Datei nicht sagen kann.

Mich interessiert auch, womit Du das Spiel entwickelst.

tim
 
Das Spielchen läuft unter PHP und belastet mySQL recht intensiv.

Dennoch ist auch dazu wieder zu sagen:

Wenn ich den Webspace des "zweiten Users" benutze und eine Kopie des Spiels mit mySQL-Connect zur Original-DB laufen lasse, ist alles fluffig.

Die Datei, mit der ich mich offenbar herumschlagen sollte, scheint mir die server-tuning.conf zu sein.

Aber welche Werte kann und sollte ich verändern ? Hier die derzeitigen Settings:

##
## Server-Pool Size Regulation (MPM specific)
##

# the MPM (multiprocessing module) is not a dynamically loadable module in the
# sense of other modules. It is a compile time decision which one is used. We
# provide different apache2 MPM packages, containing different httpd2 binaries
# compiled with the available MPMs. See APACHE_MPM in /etc/sysconfig/apache2.

# prefork MPM
<IfModule prefork.c>
# number of server processes to start
StartServers 5
# minimum number of server processes which are kept spare
MinSpareServers 5
# maximum number of server processes which are kept spare
MaxSpareServers 10
# maximum number of server processes allowed to start
MaxClients 150
# maximum number of requests a server process serves
MaxRequestsPerChild 0
</IfModule>

# worker MPM
<IfModule worker.c>
# initial number of server processes to start
StartServers 2
# minimum number of worker threads which are kept spare
MinSpareThreads 25
# maximum number of worker threads which are kept spare
MaxSpareThreads 75
# maximum number of simultaneous client connections
MaxClients 150
# constant number of worker threads in each server process
ThreadsPerChild 25
# maximum number of requests a server process serves
MaxRequestsPerChild 0
</IfModule>

# leader MPM
<IfModule leader.c>
# initial number of server processes to start
StartServers 2
# minimum number of worker threads which are kept spare
MinSpareThreads 25
# maximum number of worker threads which are kept spare
MaxSpareThreads 75
# maximum number of simultaneous client connections
MaxClients 150
# constant number of worker threads in each server process
ThreadsPerChild 25
# maximum number of requests a server process serves
MaxRequestsPerChild 0
</IfModule>

# perchild MPM
<IfModule perchild.c>
# constant number of server processes
NumServers 5
# initial number of worker threads in each server process
StartThreads 5
# minimum number of worker threads which are kept spare
MinSpareThreads 5
# maximum number of worker threads which are kept spare
MaxSpareThreads 10
# maximum number of worker threads in each server process
MaxThreadsPerChild 20
# maximum number of connections per server process
MaxRequestsPerChild 0

AcceptMutex fcntl
</IfModule>

# metux MPM
<IfModule metuxmpm.c>
# initial number of worker threads in each server process
StartThreads 5
# minimum number of worker threads which are kept spare
MinSpareThreads 5
# maximum number of worker threads which are kept spare
MaxSpareThreads 10
# maximum number of connections per server process
MaxRequestsPerChild 0

Multiplexer "wwwrun" "www"

</IfModule>


#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 15

#
# The following directives modify normal HTTP response behavior to
# handle known problems with browser implementations.
#
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0

#
# The following directive disables redirects on non-GET requests for
# a directory that does not include the trailing slash. This fixes a
# problem with Microsoft WebFolders which does not appropriately handle
# redirects for folders with DAV methods.
# Same deal with Apple's DAV filesystem and Gnome VFS support for DAV.
#
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully
BrowserMatch "^gnome-vfs" redirect-carefully

Gruß,
Stefan
 
/Watson, was haben wir für Fakten ? ;)

- Auf User 1 wird dasselbe Script oft aufgerufen und wird langsam
- Auf User 2 wird ein (körperlich) anderes aufgerufen, und bleibt schnell
- php und mySql

Hm, also, bis auf die "MaxRequestsPerChild=0" würde mir an obiger Datei nichts besonderes auffallen (auch wenn ich nicht alle Einträge verstehe), zumal ja - wie schon oben bemerkt wurde - auch User2 vom selben Apache bedient wird.

Aber was ist mit mySQL ? Alle Verbindungen für User1 kommen doch von "einem Script", während User2 ein anderes (andere Location) benutzt. Gab es da nicht irgendwas mit MaxRequests, oder persistent connections an/aus, oder so ? Ich meine, irgend eine Begrenzung, in die das User1-Script 'reinläuft, und das von User2 nicht ?

Es ist mySql, das hab' ich im Urin (igitt) :p
 
Back
Top